errorEmail.js 920 B

1234567891011121314151617181920212223242526272829303132
  1. 'use strict';
  2. const _ = require('lodash');
  3. module.exports = options => {
  4. return async function errorEmail(ctx, next) {
  5. try {
  6. await next();
  7. } catch (e) {
  8. let errcode = -1,
  9. errmsg = '服务发生错误',
  10. details;
  11. const emailData = {};
  12. if (_.isNumber(e.errcode)) {
  13. errcode = _.get(e, 'errcode');
  14. errmsg = _.get(e, 'errmsg');
  15. details = _.get(e, 'details');
  16. emailData.errmsg = errmsg;
  17. emailData.details = details;
  18. } else {
  19. emailData.errmsg = e.stack;
  20. }
  21. emailData.errcode = errcode;
  22. // 未定义的错误需要发邮件,定义的错误不需要
  23. if (!_.isNumber(e.errcode)) {
  24. // 非开发模式发送邮件
  25. if (process.env.NODE_ENV !== 'development') {
  26. ctx.service.util.email.errorEmail(emailData);
  27. }
  28. }
  29. ctx.fail(errcode, errmsg, details);
  30. }
  31. };
  32. };