什么时候在中间件中使用 () 什么时候只使用引用

When to use () in a middleware and when to use just reference

var cookieParser = require('cookie-parser')
var cookieValidator = require('./cookieValidator')

var app = express()

async function validateCookies (req, res, next) {
  await cookieValidator(req.cookies)
  next()
}

app.use(cookieParser())

app.use(validateCookies)

// error handler
app.use(function (err, req, res, next) {
  res.status(400).send(err.message)
})

app.listen(3000)

上面的代码中,cookieParser()validateCookies都是中间件,只是执行方式不同。 cookieParser 有一个类似 () 的函数,但 validateCookies 没有。有人可以解释为什么吗?对不起,如果我听起来很愚蠢。

app.use() 函数采用单个参数,它是一个 函数参考 作为 Express 中路由器中间件的函数。

你已经正确地包含了对 validateCookies 函数的引用而不带括号,因为你只是想让 Express 知道你希望它用作中间件的函数,而不是在当时执行它(Express 会在合适的时候为您调用该函数)。

cookie-parser 有点离群(我可以看出您的困惑源于何处)。 cookieParser() 函数实际上 returns 成功执行后的函数引用。这种设计很可能是因为这个特定的模块允许开发人员传入某些值来更改结果函数作为中间件的行为。