中间件是一种可以访问请求和响应对象的功能,也可以next在应用程序的请求-响应周期中使用该功能。
在本教程中,我们将学习如何在Node.js Express应用程序中定义中间件函数,以及如何调用中间件函数。
request –是客户端发出HTTP请求(例如PUT,GET等)时到达Express应用程序的HTTP请求。它包含诸如查询字符串,url参数,标头等属性。
response–对象表示Express应用程序在收到HTTP请求时发送的HTTP响应。
next – next用于继续中间件堆栈中的下一个中间件。
request-response cycle(请求-响应周期) –从请求打入Express应用程序开始,直到响应离开该应用程序以进行请求为止执行的操作周期。
中间件堆栈–在请求-响应周期中执行的中间件功能堆栈。
正如我们在中间件功能的定义中已经提到的那样,它可以访问请求,响应对象和下一个功能。
语法与JavaScript函数的语法相同。它接受请求,响应对象和下一个函数作为参数。
function logger(req, res, next) { }
这里logger是函数名称,req是HTTP请求对象,res是节点响应对象,next是请求-响应周期中的下一个函数。
您可以访问request对象的所有属性和方法req。
同样,您可以访问response object的所有属性和方法res。
next()中间件函数内部的调用函数是可选的。如果使用next()语句,则在请求-响应周期中继续执行下一个中间件功能。如果您不调用next()函数,则给定请求的执行将在此处停止。
function logger(req, res, next) { // 您的代码 next() // 调用中间件堆栈中的下一个函数 }
在Express应用程序中,您可以使用应用程序对象上的use函数来调用中间件。
var express = require('express') var app = express() function logger(req, res, next) { // 您的代码 next() } app.use(logger)
在此示例中,我们将定义一个名为logger的中间件,该中间件将当前时间和查询字符串记录到控制台。
app.js
var express = require('express') var app = express() // 定义中间件功能 function logger(req, res, next) { console.log(new Date(), req.url) next() } // 在每个请求-响应周期中调用logger:middleware app.use(logger) // 为路径“ /”执行的路由 app.get('/', function (req, res) { res.send('This is a basic Example for Express.js by nhooo') }) // 启动服务器 var server = app.listen(8000, function(){ console.log('Listening on port 8000...') })
启动此应用程序,然后在浏览器中单击以下URL。
http://localhost:8000/
http://localhost:8000/hello-page/
输出将是
对于监听8000的应用程序的每个请求,我们都附加了一个中间件功能。对于url http://localhost:8000/,URL为/ ,因此logger的输出为当前时间和'/'。对于url同样如此'/hello-page/'。