2016-04-02 36 views
0

我有一個隨機生成的字符串,我將其設置爲我的數據庫表中的屬性的值。在成功更新我的記錄後,我會發送一封包含數據庫記錄中使用的相同標記的電子郵件。不幸的是,我的then語句中的token參數不包含該標記,而是被替換爲值1.爲什麼會發生這種情況,並且它與promise功能的工作方式有關?JavaScript承諾沒有通過鏈中的正確價值

這是出現在我的代碼示例控制檯日誌和SQL更新:

This is the token: 78a4543cdd4cfd9d8c7fbad89aed9f902e07c372 
Executing (default): UPDATE `user` SET `reset_password_token`='78a4543cdd4cfd9d8c7fbad89aed9f902e07c372',`reset_password_expires`='2016-04-02 14:46:13',`updatedAt`='2016-04-02 13:46:13' WHERE `email` = '[email protected]' 
Then this token: 1 

POST方法:

.post(function(req, res){ 
     async.waterfall([ 
     function(done){ 
      crypto.randomBytes(20, function(err, buf){ 
       var resetToken = buf.toString('hex'); 
       done(err, resetToken); 
      }); 
     }, (function(token, done){ 


      console.log('This is the token: ' + token); 


      models.User.update({ 
       resetPasswordToken: token, 
       resetPasswordExpires: Date.now() + 3600000 
      }, { 
      where: { email: req.body.email } 

      }).then(function(token, user, done){ 


      console.log('Then this token: ' + token); 


      var transporter = nodemailer.createTransport(sgTransport(options)); 

      var mailOptions = { 
       from: '"Test Email" <[email protected]', 
       to: '[email protected]', 
       subject: 'Password Rest Confirmation', 
       text: 'You are receiving this because you (or someone else) have requested the reset of the password for your account.\n\n' + 
         'Please click on the following link, or paste this into your browser to complete the process:\n\n' + 
         'http://' + req.headers.host + '/reset/' + token + '\n\n' + 
         'If you did not request this, please ignore this email and your password will remain unchanged.\n' 
      }; 

      transporter.sendMail(mailOptions, function(error, info){ 
       if(error){ 
        return console.log(error); 
       } 
       console.log('Message sent: ' + info.response); 

      }); 
       res.redirect('/'); 
       //res.redirect('/password-reset-confirmation') Make a confirmation page with information or just send a flash message 
      }) 
     })], function(error){ 
     if(error){ 
      console.log(error); 
     } 
    }) 
    }); 

回答

2

token接收值1因爲update()操作返回受影響的記錄數。在這種情況下,更新了單個記錄。

+0

感謝您的回答。這正是我正在尋找的 – cphill