express - 何时在中间件中使用 () 以及何时使用仅引用
问题描述
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()
函数实际上在成功执行时返回一个函数引用。这种设计很可能是因为这个特定的模块允许开发人员传入某些值来改变结果函数作为中间件的行为。
推荐阅读
- java - 无法在 java 8 中导入 java.util.stream
- webview - 在 webview 内部和外部打开
- r - 通过正则表达式解决缩短符号
- r - 有没有办法重新格式化以下文本文件的结构
- reactjs - ReactJs:按今天,本周,当年分组数据
- apache-flink - 如果算子的并行实例总数高于 Flink 应用程序的并行度会怎样?
- php - 带有哈希值的 url id 掩码:未配置连接 [App\User]
- sql - 选择每年销量前十的产品
- javascript - React Material TextArea 样式被破坏
- php - Laravel 短信验证 api 使用 firebase 短信而不使用 twilo 或 nexmoo