【发布时间】:2022-04-14 04:03:54
【问题描述】:
当我向我的端点发出请求时,我需要在发送电子邮件的情况下获得成功的响应!否则,它应该抛出一个错误:
myendpoint.js
router.post("/", upload.none(), async (req, res) => {
try {
let body = JSON.parse(req.body.contact);
await getDb("messages").insertOne({
name: body.name,
email: body.email,
phone: body.phone,
subject: body.subject,
message: body.message,
});
await sendEmail(body);
res.send(
JSON.stringify({
success: true,
msg: "Message has been sent successfully",
})
);
} catch (err) {
res.send(JSON.stringify({ success: false, msg: err }));
}
});
sendEmail.js
const sendEmail = async function (props) {
const transporter = nodemailer.createTransport({
service: process.env.EMAIL_SERVICE,
host: process.env.EMAIL_HOST,
auth: {
user: process.env.EMAIL_FROM,
pass: process.env.EMAIL_PASS,
},
});
const mailOptions = {
from: process.env.EMAIL_FROM,
to: process.env.EMAIL_TO,
name: props.name,
email: props.email,
phone: props.phone,
subject: props.subject,
text: props.message,
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
throw new Error("Message did Not send!");
}
});
};
问题出现在“await sendEmail(body);”之前结束,我得到错误,我得到“消息已成功发送”,然后服务器崩溃! 我错过了什么?
【问题讨论】:
-
sendEmail里面没有awaits,你觉得它会等什么?如果 nodemailer 本身不支持 promise,请查找“promisify”。
标签: node.js async-await nodemailer