English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NodeJS базовый учебник

NodeJS Express.js

NodeJS буфер & URL;

NodeJS MySql

NodeJS MongoDB

NodeJS файлы (FS)

Другие NodeJS

Межсервисные компоненты Express.js

Middleware Express.js

Что такое middleware?

Middleware - это функция, которая может получить доступ к объектам запроса и ответа и использовать функцию next в цикле запрос-ответ приложения.

В этом руководстве мы будем изучать, как определять функции middleware в приложении Node.js Express и как вызывать функции middleware.

Термины middleware

request – это HTTP-запрос, поступающий в приложение Express при отправке клиентом HTTP-запроса (например, PUT, GET и т.д.), он содержит такие свойства, как строка запроса, параметры URL, заголовки и т.д.

response– объект represents HTTP-ответ, отправляемый приложением Express при получении HTTP-запроса.

next – next используется для продолжения выполнения следующей функции в стеке middleware.

request-response cycle(Цикл запрос-ответ) – это цикл операций, выполняемых от момента, когда запрос поступает в приложение Express, до момента, когда ответ покидает приложение для обработки запроса.

Стек middleware– это набор функций 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)

Express.js中间件示例

在此示例中,我们将定义一个名为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/'。