我正在设置nodemailer以发送电子邮件。所有电子邮件均已正确发送,但有一个我无法解决的错误。错误消息是: TypeError:无法读取未定义的属性“ then”
这是我的代码:
transporter.sendMail(mailOptions, (error, info) => {
console.log(mailOptions);
})
.then((ok) => {
return ok;
})
.catch((error) => {
if (error.name = "SequelizeValidationError") {
let response = Errors.errorResponse(error);
res.status(422).send(response);
} else {
let response = Errors.errorResponse(error);
res.status(500).send(response);
}
});
答案 0 :(得分:1)
您正在将回调传递给transporter.sendMail()
,因此它不会返回承诺。这就是为什么您不能使用.then()
的原因。
从他们的文档中:
如果未设置回调参数,则该方法返回Promise对象。 Nodemailer本身在内部不使用Promises,但是为了方便起见,将返回值包装在Promise中。
您应该做什么:
transporter.sendMail(mailOptions)
.then((ok) => {
return ok;
})
.catch((error) => {
if (error.name = "SequelizeValidationError") {
let response = Errors.errorResponse(error);
res.status(422).send(response);
} else {
let response = Errors.errorResponse(error);
res.status(500).send(response);
}
});
答案 1 :(得分:0)
您已经告诉nodemailer您不希望通过提供回调来实现Promise。您可以
删除回调并使用Promise:
transporter.sendMail(mailOptions)
.then((ok) => {
console.log(mailOptions);
return ok;
})
.catch((error) => {
console.log(mailOptions);
if (error.name = "SequelizeValidationError") {
let response = Errors.errorResponse(error);
res.status(422).send(response);
} else {
let response = Errors.errorResponse(error);
res.status(500).send(response);
}
});
或
改为使用回调:
transporter.sendMail(mailOptions, (error, ok) => {
console.log(mailOptions);
if (error) {
if (error.name = "SequelizeValidationError") {
let response = Errors.errorResponse(error);
res.status(422).send(response);
} else {
let response = Errors.errorResponse(error);
res.status(500).send(response);
}
}
else {
// Do whatever you want with "ok"
}
});
答案 2 :(得分:0)
尝试在尝试使用时添加async关键字,然后应使用promise应当使用的键
async function sendASNICMAIL() {
transporter.sendMail(mailOptions, (error, info) => {
console.log(mailOptions);
}).then((ok) => {
return ok;
}).catch((error) => {
if (error.name = "SequelizeValidationError") {
let response = Errors.errorResponse(error);
res
.status(422)
.send(response);
} else {
let response = Errors.errorResponse(error);
res
.status(500)
.send(response);
}
});
} 尝试这样做并告诉我是否在工作 ]