首页 > 解决方案 > 何时在中间件中使用 () 以及何时使用仅引用

问题描述

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。有人可以解释为什么吗?对不起,如果我听起来很愚蠢。

标签: expressmiddleware

解决方案


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

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

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


推荐阅读