中间件函数 validateCookies

中英双语

最后,我们将创建一个中间件函数来验证传入的 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 中间件