Javascript 为什么赢了';nodeEmailer中的错误处理工作?

Javascript 为什么赢了';nodeEmailer中的错误处理工作?,javascript,node.js,express,nodemailer,Javascript,Node.js,Express,Nodemailer,我正试图用nodemailer建立一个非常简单的联系表单,它工作得很好,但我的问题是它不能处理错误。如果抛出错误,页面应该重定向,但是重定向没有发生,应用程序停止运行。我一辈子都搞不懂为什么会发生这种事。这是我的密码: if(请求方法=='POST'){ const name=req.body.name; const email=req.body.email; const msg=req.body.message; const transporter=nodemailer.createTrans

我正试图用nodemailer建立一个非常简单的联系表单,它工作得很好,但我的问题是它不能处理错误。如果抛出错误,页面应该重定向,但是重定向没有发生,应用程序停止运行。我一辈子都搞不懂为什么会发生这种事。这是我的密码:

if(请求方法=='POST'){
const name=req.body.name;
const email=req.body.email;
const msg=req.body.message;
const transporter=nodemailer.createTransport({
服务:“gmail”,
认证:{
用户:“myemail”,//此处未显示
pass:process.env['GMAIL\u pass']
}
});
常量邮件选项={
from:'myemail',//不在这里
收件人:'myemail',//不在这里
主题:“投资组合查询”,
正文:`
名称:${Name}
电子邮件:${Email}
消息:${msg}`
};
transporter.sendMail(邮件选项,(错误,信息)=>{
如果(错误){
//如果抛出错误,它应该重定向回带有失败消息的页面
return res.redirect('/about?send=fail#contact');
}否则{
return res.redirect('/about?send=success#contact');
}
});
}

如果我通过注释出一些重要的内容或只是抛出一个错误而在脚本中引入一个错误,正如我所说的,
sendMail
回调中的错误处理块不起任何作用。正如我所说,它可以正常工作并发送电子邮件,但如果出现问题,我肯定希望我的用户知道。有人能帮我理解如何纠正这个问题吗?

我终于自己找到了解决办法。下面是一个包装函数:

功能发送电子邮件(请求){
const name=req.body.name;
const email=req.body.email;
const msg=req.body.message;
const transporter=nodemailer.createTransport({
主机:“smtp.gmail.com”,
港口:587,
安全:错误,
服务:“gmail”,
认证:{
用户://遗漏,
pass:process.env['GMAIL\u pass']
}
});
常量邮件选项={
被遗漏的
漏掉
主题:“投资组合查询”,
正文:`
名称:${Name}
电子邮件:${Email}
信息:
${msg}`};
返回transporter.sendMail(邮件选项);
}
然后函数调用:

试试看{
等待发送电子邮件(req);
return res.redirect('/about?send=success#contact')
}捕捉(错误){
return res.redirect('/about?send=fail#contact')
}

因为
sendMail
函数在没有回调时返回承诺,所以可以在
try…catch
块中调用它。

我在这里找不到“res”变量?我只包括处理POST请求的块。
res
变量在范围内。我的缺点是没有包括整个控制器。只需检查一下这个链接-我尝试了那个解决方案。没用。我还尝试编写一个包装函数,该函数在出错时返回false,否则返回true,但该函数始终返回false,即使在发送电子邮件时也是如此。我完全感到困惑和沮丧。我想出了一个解决办法。如果您忽略回调,它将返回一个承诺。因此,我将它包装在一个函数中,该函数返回不带回调的
sendMail
函数,然后在
try…catch
块中调用包装函数,该函数用于处理错误。感谢分享您的解决方案,我得到了一个
SyntaxError:await仅在异步函数中有效