对 express get 方法的异常调用。应该是错误的,但运行良好

Unusual call to express get method. Should be wrong but runs well

Express 的 get 方法只记录了两种调用,但是在 passportjs.org 的文档中显示了第三种调用。

我正在学习使用 google 的 Oauth 2.0 策略实施 SSO。在此期间,我遇到了 app.get 方法的不寻常用法。这样的函数调用在 express 的文档中没有定义。

我参考了以下两页,以确保我没有弄错:

  1. Express JS documentation for app.get method
  2. Passport JS documentation for app.get method

Express js文档只有两种调用:

1. app.get(name)
2. app.get(path, callback [, callback ...])

现在,passportjs.org 中的调用似乎使用了第二种形式,但请注意第二个参数 (passport.authenticate) 实际上是函数调用,而不是函数定义(即回调)因为它应该根据上面的#2:

app.get('/auth/google',
  passport.authenticate('google', { scope: 'https://www.google.com/m8/feeds' });

我预计会出现 运行 时间错误,因为对 app.get 的调用与任何已记录的函数调用类型都不匹配。但是,函数调用 运行 很好并完成了预期的任务。怎么样?

来自 Passport npm 页面

Passport is Express-compatible authentication middleware for Node.js

它的工作方式是 passport 公开与表达期望的 callback 兼容的方法。

表达期望的最简单的callback signature是:

(req, res) => { /* something */ }

因此,returns 预期签名 的另一个函数的任何函数都可以作为中间件传递。

例如

const app = express()

function myFunc(some) {
  return (req, res) => {
    res.json(some);
  }
}

app.get('/', myFunc('something'));

*Express文档在上面的linklink可配置中间件下也说明了类似的中间件功能