'use strict'; const _ = require('lodash'); module.exports = options => { return async function errorEmail(ctx, next) { try { await next(); } catch (e) { let errcode = -1, errmsg = '服务发生错误', details; const emailData = {}; if (_.isNumber(e.errcode)) { errcode = _.get(e, 'errcode'); errmsg = _.get(e, 'errmsg'); details = _.get(e, 'details'); emailData.errmsg = errmsg; emailData.details = details; } else { emailData.errmsg = e.stack; } emailData.errcode = errcode; // 未定义的错误需要发邮件,定义的错误不需要 if (!_.isNumber(e.errcode)) { // 非开发模式发送邮件 if (process.env.NODE_ENV !== 'development') { ctx.service.util.email.errorEmail(emailData); } } ctx.fail(errcode, errmsg, details); } }; };