reset password token nodejs and express, throw er; // Unhandled 'error' event ^ Error: Callback was already called
reset password token nodejs and express, throw er; // Unhandled 'error' event ^ Error: Callback was already called
我正在尝试使用 nodemailer 重设密码。我正在向用户邮件地址发送一封带有 link 的邮件以重置密码。单击页面上的更新密码 link 后,出现以下错误:-
throw er; // Unhandled 'error' event
^
Error: Callback was already called.
我不知道错误是什么,回调已经被调用是什么意思?
这是我的 post 请求代码:-
app.post('/reset/:token', function(req, res) {
async.waterfall([
function(done) {
User.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user) {
if (!user) {
req.flash('error', 'Password reset token is invalid or has expired.');
return res.redirect('back');
}
user.password = req.body.password;
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
user.save(function(err) {
req.logIn(user, function(err) {
done(err, user);
});
});
});
// res.redirect('/login');
},
function(user, done) {
var smtpTransport = nodemailer.createTransport('SMTP', {
// host:'smtp.gmail.com',
service: 'Gmail',
auth: {
user: 'myemail',
pass: 'password'
}
});
var mailOptions = {
to: user.email,
from: 'my email',
subject: 'Your password has been changed',
text: 'Hello,\n\n' +
'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n'
};
smtpTransport.sendMail(mailOptions, function(err) {
done(err);
});
}
], function(err) {
res.redirect('/');
});
});
我也没有在用户电子邮件中收到任何确认邮件。提前致谢
您的代码中有几个类似的错误可能导致错误Error: Callback was already called.
当您在回调中执行(例如)return res.redirect('back');
时,return
语句不会影响父函数。因此,可能会发生 res.something
在调用 res.anotherSomething
之前已经发生的情况,这是不允许的。
尝试使用 async-await,而不是使用回调。
好的,我弄错了,从 nodemailer.createTransport 中删除 SMTP 解决了这个问题。但是我仍然没有收到闪现消息。
我正在尝试使用 nodemailer 重设密码。我正在向用户邮件地址发送一封带有 link 的邮件以重置密码。单击页面上的更新密码 link 后,出现以下错误:-
throw er; // Unhandled 'error' event
^
Error: Callback was already called.
我不知道错误是什么,回调已经被调用是什么意思?
这是我的 post 请求代码:-
app.post('/reset/:token', function(req, res) {
async.waterfall([
function(done) {
User.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user) {
if (!user) {
req.flash('error', 'Password reset token is invalid or has expired.');
return res.redirect('back');
}
user.password = req.body.password;
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
user.save(function(err) {
req.logIn(user, function(err) {
done(err, user);
});
});
});
// res.redirect('/login');
},
function(user, done) {
var smtpTransport = nodemailer.createTransport('SMTP', {
// host:'smtp.gmail.com',
service: 'Gmail',
auth: {
user: 'myemail',
pass: 'password'
}
});
var mailOptions = {
to: user.email,
from: 'my email',
subject: 'Your password has been changed',
text: 'Hello,\n\n' +
'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n'
};
smtpTransport.sendMail(mailOptions, function(err) {
done(err);
});
}
], function(err) {
res.redirect('/');
});
});
我也没有在用户电子邮件中收到任何确认邮件。提前致谢
您的代码中有几个类似的错误可能导致错误Error: Callback was already called.
当您在回调中执行(例如)return res.redirect('back');
时,return
语句不会影响父函数。因此,可能会发生 res.something
在调用 res.anotherSomething
之前已经发生的情况,这是不允许的。
尝试使用 async-await,而不是使用回调。
好的,我弄错了,从 nodemailer.createTransport 中删除 SMTP 解决了这个问题。但是我仍然没有收到闪现消息。