Express 路由器完全跳过中间件

Express router skips a middleware entirely

我有一个像这样连接 PassportJS 的身份验证路由:

router.post('/',
  passport.authenticate('local', { failureRedirect: '/' }),
  async (req, res, next, done) => { // Middleware 1
    console.log('FIRST MIDDLEWARE');
    const { body: { remember_me, username } } = req;
    // issue a remember me cookie if the option was checked
    if (!remember_me) { return next(); }
    const token = uuidv4();
    const tokenEntry = await new Token({ token, userId: req.user.id }).save();
    console.log('TOKEN ENTRY', tokenEntry);
    return next();
  },
  (req, res) => { // Middleware 2
    console.log('SECOND MIDDLEWARE');
    res.cookie(process.env.USER_DATA_COOKIE, signedUserData(req), {
      httpOnly: true,
      secure: true,
    });
    res.json({ success: true });
  });

但是当 运行 时,第一个 console.log() 永远不会执行。为什么?它不应该在第二个之前被调用吗?

我认为您的 passport.authenticate middleware 调用直接在函数末尾完成。 所以它会跳过所有即将到来的中间件并直接运行你的 API 回调函数。

这篇answer会对你有所帮助。