我有一个nodejs
应用程序,它使用nodemailer
插件发送电子邮件。这种工作有99.99%的时间,但昨天应用程序在PM2
日志中挂起了以下错误。
mod.mailer: Error: connect ENETUNREACH 2a00:1450:400c:c04::6c:465 - Local (:::0)
我没有找到关于此类错误的大量信息。完全可能的是网络连接中可能存在短暂的问题。下面是我写的用于传输电子邮件的模块的代码。我如何捕获此类错误并确保应用程序不会挂断,而是重试发送电子邮件。
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport(process.env.TRANSPORT);
function mail(options) {
transporter.sendMail({
from: process.env.SUBDIRECTORY + '\@' + process.env.HOST + '\ \<geolytix@gmail.com\>',
to: options.to,
subject: options.subject,
text: options.text
}, function (err, info) {
if (err) {
console.log('mod.mailer: ' + err);
}
console.log('mod.mailer: ' + info.response);
});
}
module.exports = {
mail: mail
};
答案 0 :(得分:0)
该问题是内部软件包捕获,在出现网络问题时会弹出。 因此,要解决此问题,还必须将代码放入try-catch块中,然后递归调用函数
function mail(options) {
try{
transporter.sendMail({
from: process.env.SUBDIRECTORY + '\@' + process.env.HOST + '\ \<geolytix@gmail.com\>',
to: options.to,
subject: options.subject,
text: options.text
}, function (err, info) {
if (err) {
console.log('mod.mailer: ' + err);
}
console.log('mod.mailer: ' + info.response);
});
} catch(err){
console.log(err);
mail(options)
}
}
注意: 如果错误持续不断,这种技术还可能导致javascript无限期地堆积在自己身上,并吞噬内存,直到它们超过引擎的容量为止。
一种解决方案是对递归进行检查,如果达到一定限制,该递归将下降。