繁体   English   中英

如何防止我的 node.js 错误中间件 function 在随后的 function 调用中失败?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM