gpt4 book ai didi

node.js - 类型错误 : done is not a function (nodemailer)

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:29 24 4
gpt4 key购买 nike

我使用nodemailer作为忘记密码的应用程序,为忘记密码执行电子邮件,但是当用户重置密码时,他们不会收到确认电子邮件。不知道为什么没有发生。

似乎在 did(err) 行上抛出错误。下面是重置 token 的获取处理程序

//get handler for reset token
app.post('/reset/:token', function(req, res, next) {
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);
});
});
});
},
function (token, user, done) {
var options = {
service: 'Mailgun',
auth: {
user: 'postmaster@Sandboxxxxxxxxxxx.mailgun.org',
pass: 'xxxxxxxxxxxxxx'
}
};
var transporter = nodemailer.createTransport(smtpTransport(options))

var mailOptions = {
to: user.email,
from: 'postmaster@Sandbox65b418bcf76c4a5e909aedb7b6e87b45.mailgun.org',
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'
};
transporter.sendMail(mailOptions, function(err) {
req.flash('success', 'Success! Your password has been changed.');
done(err);
});
}
], function(err) {
res.redirect('/');
});
});

最佳答案

您在第一个水墙任务中错误地调用了 done 函数。第二个任务需要两个参数:token、user 和附加回调。但您只传递一个参数:user

done函数中添加token参数:

 ...
user.save(function(err) {
req.logIn(user, function(err) {
done(err, token, user); // TODO: initialize token
});
});
....

关于node.js - 类型错误 : done is not a function (nodemailer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com