1

Express.js関数でカスタムコールバックを使用する適切な方法は何ですか?

次に例を示します。

//routes/reset.js

user.save(function(err){
  if ( err ) return next(err);
  reset.send_reset_email(req, res, user, function(req, res){
    req.flash('info', 'Check your email for a link to reset your password.');
    res.redirect('/');
  });
});

これが正しく機能するには、reset.send_reset_email にどの署名を使用すればよいですか?

これは私が持っているものです:

exports.send_reset_email = function(req, res, user, next){
  //send email
  transport.sendMail(options, function(err, responseStatus) {
     if (err) { 
      console.log(err);
    } else { 
      next(req, res);
     //do I need to explicitly pass req, res here?
     //is next() reserved word here?
    } 
  });

});

ここでreq、resを明示的に渡す必要がありますか? next() 予約語はここにありますか?

4

1 に答える 1

2

next() はエラーまたは別のルートを受け入れ、通常は次のミドルウェアを続行するために呼び出されます。

send_reset_email 関数では、next() は Express の next() ではありません。なぜなら、次ではなく function(req,res) を渡し、sendmail 関数の結果を処理する代わりに独自のコールバックを渡すためです。

user.save(function(err){
  if (err) return next(err) // if thats express's next()
  reset.send_reset_email(req, res, user, function(err, data){
    if(err) {
      // send err msg
    } else {
      req.flash('info', 'Check your email for a link to reset your password.');
      res.redirect('/');
    }
  });
});


xports.send_reset_email = function(req, res, user, cb){
  //send email
  transport.sendMail(options, function(err, responseStatus) {
     if (err) return cb(err)
     cb(null,responseStatus)
  })
})
于 2012-09-28T22:48:34.820 に答える