[英]How do I prevent my node.js error middleware function from failing on subsequent function calls?
我正在写一个身份验证。 node.js 网络服务器的路由。 我正在使用 Express,它运行良好。
我遇到的问题是在发生错误时调用 sendMail() function。 目前,我只是在测试路线中抛出一个新错误。
throw new Error('testing...');
因为我使用的是 express-async-errors 模块,所以如果路由中发生错误,程序流会转到我的错误中间件 function。
它工作完美。
但是在这个错误中间件 function 中,我调用了我的 sendMail() function,它立即失败给我与上面相同的错误:'testing...'
const sendEmail = require('../email/sendEmail');
// error middleware function
async function error(err, req, res, next) {
const wasSent = await sendEmail('my-user-name@gmail.com', 'Error', err);
console.log(wasSent);
// http 500 - internal server error
res.status(500).send("Something unexpected happened. Our team has been notified.");
}
结果是我在下面的 sendMail() function 中的 catch 块被调用。 我究竟做错了什么?
这是我的发送邮件 function:
const nodemailer = require("nodemailer");
const striptags = require('striptags');
const config = require('config');
async function sendEmail(to, subject, content) {
try {
// create reusable transporter object using the default smtp transport
let transporter = nodemailer.createTransport({
host: config.get('emailHost'),
port: config.get('emailPort'),
secure: config.get('emailSecure'), // true for 465, false for other ports
auth: {
user: config.get('emailUsername'),
pass: config.get('emailPassword'),
},
});
// send mail with defined transport object
let info = await transporter.sendMail({
from: config.get('emailFrom'), // sender address
to: to, // list of receivers
subject: subject,
text: striptags(content), // plain text body
html: content, // html body
});
// e.g. message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
//console.log("message sent: %s", info.messageId);
return true;
}
catch(ex) {
console.log("error: sendEmail() invocation failed;", ex);
return false;
}
}
module.exports = sendEmail;
错误是“错误”object。 一旦我使用 UTIL 将其转换为字符串,它就起作用了。
const util = require('util');
...
const fullErrorTrace = util.inspect(err, { showHidden: false, depth: null }).replace(/[\r\n]/gm, '<br />');
const wasSent = await sendEmail('my-user-name@gmail.com', 'Error', fullErrorTrace);
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.