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会对你有所帮助。
我有一个像这样连接 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会对你有所帮助。