在 passport.js 和 express 路由器中使用 next

Use of next in passport.js and express router

我们有这样的 express.js 护照路线。我注意到下一个承诺的使用,但是如果我删除它,我的测试无论如何都可以正常工作,对于 409 和 201 响应。知道在这种情况下是否真的需要它:

exports.signUp = (req, res, next) ->
  passport.authenticate('local-signup', (err, user, next) ->
    if err
      res.status(409).send
        status: 'Conflict'
        error: 'Benutzername bereits vergeben'
        type: 'warning'
      return
    else if user != false and user != ''
      token = jwt.sign({ user: user }, secret.secretToken, expiresInMinutes: 60 * 60)
      res.status(201).send
        status: 'Created'
        error: 'Benutzer erstellt'
        type: 'success'
        token: token
        user: user
    return
  ) req, res, next
  return

注意:是 coffeescript

如果您不在传递给 passport.authenticate 的回调中使用它,则可以将其省略。然而,passport.authenticate 本身可能需要它来处理某些情况(这是一个猜测,我没有深入研究 Passport 代码来确定)。

因此您可以将代码重写为:

exports.signUp = (req, res, next) ->
  passport.authenticate('local-signup', (err, user) ->
    ...
  ) req, res, next
  return

改进不大。

作为警告:您的代码在某些情况下不会发送响应,即如果 user 为假或空字符串(在那种情况下您只是 return 而不是发送响应)。