Search code examples
node.jscallbacknodemailer

reset password token nodejs and express, throw er; // Unhandled 'error' event ^ Error: Callback was already called


I am trying to reset password using nodemailer. I am sending a mail to the user mail address with a link to reset password. After clicking on update password link on the page it is throwing the following error:-

throw er; // Unhandled 'error' event
      ^

Error: Callback was already called.

I can't get what's the error and what is meant by callback is already called?

here is my post request code :-

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('/');
  });
});

I am not getting any confirmation mail too on the user email..Thanks in advance


Solution

  • ok, I got the mistake, removing SMTP from nodemailer.createTransport solved the issue. However I am still not getting the flash-message.