Express4中文文档
最后,我们将创建一个中间件函数来验证传入的 cookie 并在 cookie 无效时发送 400 响应。
这是一个使用外部异步服务验证 cookie 的示例函数。
async function cookieValidator (cookies) {
try {
await externallyValidateCookie(cookies.testCookie)
} catch {
throw new Error('Invalid cookies')
}
}
这里我们使用 cookie-parser
中间件从 req
对象中解析传入的 cookie 并将它们传递给我们的 cookieValidator
函数。validateCookies
中间件返回一个 Promise,在拒绝时会自动触发我们的错误处理程序。
const express = require('express')
const cookieParser = require('cookie-parser')
const cookieValidator = require('./cookieValidator')
const app = express()
async function validateCookies (req, res, next) {
await cookieValidator(req.cookies)
next()
}
app.use(cookieParser())
app.use(validateCookies)
// error handler
app.use((err, req, res, next) => {
res.status(400).send(err.message)
})
app.listen(3000)
注意在
await cookieValidator(req.cookies)
之后如何调用next()
。这确保了如果cookieValidator
解析,堆栈中的下一个中间件将被调用。如果您将任何内容传递给next()
函数(字符串'route'
或'router'
除外),Express 会将当前请求视为错误,并将跳过任何剩余的非错误处理路由和中间件函数。
因为您可以访问请求对象、响应对象、堆栈中的下一个中间件函数以及整个 Node.js API,所以中间件函数的可能性是无穷无尽的。
有关 Express 中间件的更多信息,请参阅:使用 Express 中间件。