为何JavaScript代码中passport.authenticate("local")后无"."直接调用?
这段Passport.js代码的语法解析
先看你提到的代码:
else{ passport.authenticate("local")(req, res, function () { res.redirect("/secrets"); }); }
核心原因很简单:passport.authenticate("local")的返回值本身就是一个函数,所以可以直接在后面加括号传入参数调用,完全不需要用.来链式调用方法。
拆开来写你就懂了,上面的代码等价于:
else { // 第一步:调用authenticate,得到一个符合Express中间件格式的函数 const localAuthHandler = passport.authenticate("local"); // 第二步:调用这个返回的函数,传入请求、响应对象和认证成功后的回调 localAuthHandler(req, res, function () { res.redirect("/secrets"); }); }
Passport设计authenticate方法时,就是让它返回一个可直接执行的中间件函数——这个函数会处理本地认证逻辑,完成后调用你传入的回调(也就是代码里的跳转逻辑)。把两步合并成一行写,就成了你看到的那种写法。
内容的提问来源于stack exchange,提问作者Bikram upadhyaya
相关产品推荐
相关产品推荐

