【问题标题】:Express router skips a middleware entirelyExpress 路由器完全跳过中间件
【发布时间】:2020-01-04 21:57:42
【问题描述】:

我有一个与 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() 永远不会执行。为什么?它不应该在第二个之前调用吗?

【问题讨论】:

    标签: node.js express middleware


    【解决方案1】:

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

    这个answer 会帮助你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2017-03-08
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2011-12-07
      相关资源
      最近更新 更多