Express 文档(编写中间件)

编写中间件

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

中间件函数能够执行如下任务:github

  • 执行任何代码。
  • 更改请求和响应对象。
  • 结束请求—响应周期。
  • 调用堆栈中的下一个中间件。

若是当前的中间件函数没有结束请求—响应周期,它必须调用next()将控制权传递给下一个中间件函数,不然,请求将被挂起。express

下图显示了中间件函数调用的元素:segmentfault

clipboard.png

示例

如下是一个简单的“Hello World” Express应用程序示例,本文的其他部分将为应用程序定义和添加两个中间件函数:一个名为myLogger,用于打印简单的日志消息,另外一个名为requestTime,用于显示HTTP请求的时间戳。浏览器

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

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

app.listen(3000)

中间件函数myLogger

这是一个名为“myLogger”的中间件函数的简单示例,当对应用程序的请求经过时,此函数只打印“LOGGED”,中间件函数被分配给名为myLogger的变量。cookie

var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}
注意上面的调用 next(),调用此函数会调用应用程序中的下一个中间件函数, next()函数不是Node.js或Express API的一部分,而是传递给中间件函数的第三个参数。 next()函数能够命名为任何,但按照惯例,它老是被命名为“ next”,为避免混淆,请始终使用此约定。

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

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)

每次应用程序收到请求时,它都会向终端输出消息“LOGGED”。app

中间件加载的顺序很重要:首先加载的中间件函数也会先执行。函数

若是myLogger在到达根路径的路由以后加载,则请求永远不会到达它,而且应用程序不会打印“LOGGED”,由于根路径的路由处理程序会终止请求—响应周期。ui

中间件函数myLogger只是打印一条消息,而后经过调用next()函数将请求传递给堆栈中的下一个中间件函数。

中间件函数requestTime

接下来,咱们将建立一个名为“requestTime”的中间件函数,并将一个名为requestTime的属性添加到请求对象中。

var requestTime = function (req, res, next) {
  req.requestTime = Date.now()
  next()
}

该应用程序如今使用requestTime中间件函数,此外,根路径路由的回调函数使用中间件函数添加到req(请求对象)的属性。此外,根路径路由的回调函数使用中间件函数添加到req(请求对象)的属性。

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

var requestTime = function (req, res, next) {
  req.requestTime = Date.now()
  next()
}

app.use(requestTime)

app.get('/', function (req, res) {
  var responseText = 'Hello World!<br>'
  responseText += '<small>Requested at: ' + req.requestTime + '</small>'
  res.send(responseText)
})

app.listen(3000)

当你向应用程序的根目录发出请求时,应用程序如今会在浏览器中显示你的请求的时间戳。

由于你能够访问请求对象、响应对象、堆栈中的下一个中间件函数以及整个Node.js API,因此中间件函数的可能性是无穷无尽的。

有关Express中间件的更多信息,请参阅:使用Express中间件。

可配置的中间件

若是你须要中间件可配置,请导出一个接受选项对象或其余参数的函数,而后根据输入参数返回中间件实现。

文件:my-middleware.js

module.exports = function(options) {
  return function(req, res, next) {
    // Implement the middleware function based on the options object
    next()
  }
}

如今可使用中间件,以下所示。

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

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

有关可配置中间件的示例,请参阅cookie-sessioncompression


上一篇:路由

下一篇:使用中间件

相关文章
相关标签/搜索