Skip to content

开发中间件

中间件函数是可以访问请求对象 (req)、响应对象(res) 和 next 应用程序的请求-响应周期中的函数的函数。该next函数是 Express 路由器中的一个函数,当被调用时,它会执行当前中间件的后续中间件。

示例

中间件函数 myLogger

以下是名为 “myLogger” 的中间件函数的简单示例。当应用程序的请求通过此函数时,它只会打印“LOGGED”。中间件函数被分配给名为的变量 myLogger。

js
const myLogger = (req, res, next) => {
  console.log('LOGGED');
  next();
};

注意上面对 的调用 next()。调用此函数会调用应用中的下一个中间件函数。该next()函数不是 Node.js 或 Express API 的一部分,而是传递给中间件函数的第三个参数。该next()函数可以命名为任何名称,但按照惯例,它始终命名为“next”。为避免混淆,请始终使用此惯例。

要加载中间件函数,请调用 app.use() 并指定中间件函数。例如,以下代码myLogger在路由到根路径 (/) 之前加载中间件函数。

js
var express = require('express')
var app = express()

var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}

app.use(myLogger)

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000)

中间件函数validateCookies

创建一个中间件函数来验证传入的 cookie,如果 cookie 无效则发送 400 响应。

这是一个使用外部异步服务验证 cookie 的示例函数

js
async function cookieValidator (cookies) {
  try {
    await externallyValidateCookie(cookies.testCookie)
  } catch {
    throw new Error('Invalid cookies')
  }
}

使用 cookie-parser 中间件解析对象传入的 cookie, validateCookies 中间件返回一个 Promise,一旦被拒绝,将自动触发我们的错误处理程序。

js
var express = require('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)

可配置的中间件

如果您需要中间件可配置,请导出一个接受选项对象或其他参数的函数,然后根据输入参数返回中间件实现。

my-middleware.js

js
module.exports = (options) => {
  return (req, res, next) => {
    // do something
    next()
  }
}

按如下所示使用中间件:

js
var mw = require('./my-middleware.js')

app.use(mw({ option1: '1', option2: '2' }))

Released under the MIT License.