为何在Passport JWT认证中间件第11行调用(req,res,next)?求推荐讲解书籍
Passport JWT中间件代码疑问解答
1. 第11行调用(req, res, next)的原因
passport.authenticate('jwt', 回调函数)这个方法不会直接执行认证逻辑,它会返回一个符合Express中间件规范的函数——也就是接收req, res, next三个参数的函数。
你的authenticateJwt是自定义的中间件,要让Passport的认证逻辑在当前请求里跑起来,就必须手动调用这个返回的中间件函数,把当前请求的req、res和next传进去,这样才能触发认证流程,进而执行你写的回调处理认证结果。
要是不调用(req, res, next),passport.authenticate返回的中间件只会被定义,不会执行,认证逻辑根本不会触发。
2. 这个函数是隐式返回的吗?
这里的passport.authenticate(...) (req, res, next),是先执行passport.authenticate拿到中间件函数,再立刻调用这个函数。这个调用的返回值是中间件执行后的结果,但Express中间件一般不靠返回值控制流程(而是用next()),所以这个返回值在当前场景里没什么作用。
不过passport.authenticate返回的中间件函数本身是有返回值的,但我们这里是直接执行它完成认证,不是把它返回给Express路由用,所以不用关心这个返回值。
3. 讲解这类实现的书籍推荐
- 《JavaScript高级程序设计(第4版)》:把JavaScript函数的核心特性讲得很透,包括函数作为返回值、立即执行这类模式,能帮你理解这种“返回函数后立即调用”写法的本质。
- 《Node.js实战(第二版)》:针对Node.js和Express生态,里面有Passport认证的实际案例,能结合场景理解这种中间件的设计逻辑。
- 《Express.js实战》:专注Express框架,深入讲解中间件的工作原理和自定义方法,对理解这类代码的设计思路很有帮助。
内容的提问来源于stack exchange,提问作者AlphanetEX
相关产品推荐
相关产品推荐

