如何在Express中间件中使用next()内passport.authenticate(…)?

我有一个简单的护照设置与我的login路线local策略。 我不知道如何正确使用身份validationfunction作为中间件。 这是我在控制器之前调用/login路由的中间件:

 exports.requireLogin = (req, res, next) => { passport.authenticate('local', { session: false }, (err, user, info) => { if (err) { next(err); } else if (!user) { res.status(401).json(info.message); } else { req.login(user, (loginError) => { if (loginError) { console.log('error here'); next(new Error('test')); } else { next(); } }); } })(req, res, next); }; 

正如你所看到的,护照function被立即用中间件参数调用。 这就是我在这里find的Stackoverflow作为如何使用下一个在该function。

现在由于某种原因不起作用。 错误不是真正处理为错误。 我通过将一个无错误的中间件作为最后一个可能的端点进行检查来检查这个问题。 我可以看到,在错误传递到next行之前,它会将error here注销到error here ,但也会在此之后注销正常中间件的检查。

据我所知,当你传递错误到下一个时,Express不应该调用任何正常的中间件。 为什么这个例子没有工作?