当前位置: 首页 > news >正文

编写中间件以用于 Express 应用程序

概述

中间件函数能够访问请求对象 (req)、响应对象 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next 的变量来表示。

中间件函数可以执行以下任务:

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

如果当前中间件函数没有结束请求/响应循环,那么它必须调用 next(),以将控制权传递给下一个中间件函数。否则,请求将保持挂起状态。

以下示例显示中间件函数调用的元素:

中间件函数适用的 HTTP 方法。

中间件函数适用的路径(路由)。

中间件函数。

中间件函数的回调自变量,按约定称为“next”。

中间件函数的 HTTP 响应自变量,按约定称为“res”。

中间件函数的 HTTP 请求自变量,按约定称为“req”。

以下是“Hello World”Express 应用程序的简单示例,将为其定义两个中间件函数:


var express = require('express');
var app = express();app.get('/', function (req, res) {res.send('Hello World!');
});app.listen(3000);

开发

以下是称为“myLogger”的中间件函数的简单示例。此函数仅在应用程序的请求通过它时显示“LOGGED”。中间件函数会分配给名为 myLogger的变量。


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

请注意以上对 next() 的调用。调用此函数时,将调用应用程序中的下一个中间件函数。 next() 函数不是 Node.js 或 Express API 的一部分,而是传递给中间件函数的第三自变量。next() 函数可以命名为任何名称,但是按约定,始终命名为“next”。为了避免混淆,请始终使用此约定。

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


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”。

中间件装入顺序很重要:首先装入的中间件函数也首先被执行。

如果在根路径的路由之后装入 myLogger,那么请求永远都不会到达该函数,应用程序也不会显示“LOGGED”,因为根路径的路由处理程序终止了请求/响应循环。

中间件函数 myLogger 只是显示消息,然后通过调用 next() 函数将请求传递到堆栈中的下一个中间件函数。

下一个示例将名为 requestTime 的属性添加到请求对象。我们将此中间件函数命名为“requestTime”。


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

现在,该应用程序使用 requestTime 中间件函数。此外,根路径路由的回调函数使用由中间件函数添加到 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!';responseText += 'Requested at: ' + req.requestTime + '';res.send(responseText);
});app.listen(3000);

您向应用程序根发出请求时,此应用程序当前在浏览器中显示请求的时间戳记。

因为您拥有请求对象、响应对象、堆栈中的下一个中间件函数以及整个 Node.js API 的访问权,所以中间件函数的可能性是无穷的。

http://www.lryc.cn/news/158713.html

相关文章:

  • 【2023年数学建模国赛】D题解题思路
  • python爬虫之正则表达式学习
  • 智慧能源方案:TSINGSEE青犀AI算法中台在能源行业的应用
  • 达梦数据库awr报告收集
  • c语言练习43:深入理解strcmp
  • NUC980webServer开发
  • 驱动开发--day2
  • 用户促活留存新方式——在APP中嵌入小游戏
  • MySQL 8.0.34(x64)安装笔记
  • 物流供应商实现供应链自动化的3种方法
  • Mysql更新时间列只改日期为指定日期不更改时间
  • 实时测试工具 Visual Studio 扩展 NCrunch 4.18 Crack
  • Neo4j 基本语法
  • docker常见面试题
  • 静态路由:配置和使用详解
  • 玩转Mysql系列 - 第15篇:详解视图
  • 0065__git fetch, git pull, git merge, git rebase
  • AJAX学习笔记4解决乱码问题
  • 【23种设计模式】享元模式【⭐】
  • 语音信号的仿真原理
  • VLDB 2023 | CDSBen: 字节跳动 veDB 数据库存储系统性能测试模型
  • crontab的配置参数和基础使用教程
  • 基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
  • K8S之使用yaml格式定义pod
  • SSH命令详解
  • Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法
  • Python中的日期和时间(一)datetime模块
  • qt触控板手势检测
  • 数据库 Redis
  • Linux之权限