gpt4 book ai didi

javascript - 为什么错误处理在 nodemailer 中不起作用?

转载 作者:行者123 更新时间:2023-12-05 00:28:46 24 4
gpt4 key购买 nike

我正在尝试使用 nodemailer 设置一个非常简单的联系表格,它工作正常,但我的问题是它不处理错误。如果抛出错误,页面应该重定向,但重定向不会发生并且应用程序停止运行。我一生都无法弄清楚为什么会发生这种情况。这是我的代码:

if (req.method === 'POST') {
const name = req.body.name;
const email = req.body.email;
const msg = req.body.message;

const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'myemail', // left out here
pass: process.env['GMAIL_PASS']
}
});

const mailOptions = {
from: 'myemail', // left out here
to: 'myemail', // left out here
subject: 'Portfolio Inquiry',
text: `
Name: ${name}
Email: ${email}
Message:${msg}`
};

transporter.sendMail(mailOptions, (error, info) => {
if (error) {
// If an error is thrown, it should redirect back to the page with a fail message
return res.redirect('/about?send=fail#contact');
} else {
return res.redirect('/about?send=success#contact');
}
});
}

如果我通过注释掉一些重要的东西或者只是抛出一个错误来在脚本中引入一个错误,正如我在 sendMail 中所说的错误处理 block 。回调不做任何事情。正如我所说,它确实可以正常工作并发送电子邮件,但如果出现问题,我绝对希望我的用户知道它。谁能帮我理解如何纠正这个问题?

最佳答案

我终于自己想出了一个解决方案。这是一个包装函数:

function sendEmail(req) {
const name = req.body.name;
const email = req.body.email;
const msg = req.body.message;

const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 587,
secure: false,
service: 'gmail',
auth: {
user: //left out,
pass: process.env['GMAIL_PASS']
}
});

const mailOptions = {
from: //left out
to: //left out
subject: 'Portfolio Inquiry',
text: `
Name: ${name}
Email: ${email}
Message:

${msg}`};

return transporter.sendMail(mailOptions);
}

然后函数调用:

try {
await sendEmail(req);
return res.redirect('/about?send=success#contact')
} catch (err) {
return res.redirect('/about?send=fail#contact')
}

因为 sendMail函数在没有给出回调时返回一个 promise ,你可以在 try...catch 中调用它堵塞。

关于javascript - 为什么错误处理在 nodemailer 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61562131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com