English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Middleware - это функция, которая может получить доступ к объектам запроса и ответа и использовать функцию next в цикле запрос-ответ приложения.
В этом руководстве мы будем изучать, как определять функции middleware в приложении Node.js Express и как вызывать функции middleware.
request – это HTTP-запрос, поступающий в приложение Express при отправке клиентом HTTP-запроса (например, PUT, GET и т.д.), он содержит такие свойства, как строка запроса, параметры URL, заголовки и т.д.
response– объект represents HTTP-ответ, отправляемый приложением Express при получении HTTP-запроса.
next – next используется для продолжения выполнения следующей функции в стеке middleware.
request-response cycle(Цикл запрос-ответ) – это цикл операций, выполняемых от момента, когда запрос поступает в приложение Express, до момента, когда ответ покидает приложение для обработки запроса.
Стек middleware– это набор функций middleware, выполняемых в цикле запрос-ответ.
Как мы уже говорили в определении функции middleware, она может получить доступ к объекту запроса, объекту ответа и следующей функции.
Синтаксис такой же, как у функций JavaScript. Она принимает в качестве параметров запрос, объект ответа и следующую функцию.
function logger(req, res, next) { }
Здесь logger - это имя функции, req - объект HTTP-запроса, res - объект ответа узла, next - функция, следующая в цикле запрос-ответ.
Вы можете получить доступ ко всем свойствам и методам объекта запроса req.
Таким образом, вы можете получить доступ ко всем свойствам и методам объекта ответа 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 w3codebox') ) // 启动服务器 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为/,因此记录器的输出为当前时间和'/'。对于URL同样如此'/hello-page/'。