【发布时间】:2018-03-01 22:28:12
【问题描述】:
成功发送电子邮件后,我无法取消请求。发送邮件后如何正确返回?这可能是一个回调地狱,但我不知道如何解决它。
我尝试将一些回报放在不同的部分,但没有奏效。
const router = require('express').Router();
const nodemailer = require('nodemailer');
const emailExistence= require('email-existence');
module.exports = router;
// Send email when user has forgotten his/her password
router.post('/forgetPass', (req, res, next) => {
if(!req.body.email){
next(new Error("Email is required."));
return;
}
emailExistence.check(req.body.email, function(err,res){
if(err || !res){
next(new Error("The email does'nt exist."));
return;
}else{
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'myemail@gmail.com',
pass: 'mypassword'
}
});
let mailOptions = {
from: 'myemail@gmail.com',
to: req.body.email,
subject: 'Link for setting a new password',
html: 'Set a new password'
text: 'email text'
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
next(new Error("Error in sending email."));
return;
}
res.json(Object.assign(req.base, {
message: "The email has been sent successfully.",
data: info
}));
return;
});
}
});
});
【问题讨论】:
-
您在
emailExistence.check中做了什么数据库检查?? -
@iam-batman,它检查电子邮件是否存在(当电子邮件存在时 res 为 true [表示电子邮件有效],当电子邮件不存在时 res 为 false)。这可以正常工作,当电子邮件不存在时我会收到错误消息。但问题是电子邮件已成功发送。请求并没有就此结束。
-
发送邮件后能否登录
info -
@iam-batman,不,它不返回 json。我也试过 return res.json(Object.assign...。但它仍然不起作用
-
我的意思是这个`transporter.sendMail(mailOptions, function(error, info){console.log(info)}`
标签: node.js express callback promise nodemailer