Express 文档(编写中间件)

news/2023/12/1 11:48:40

编写中间件

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

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

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

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

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

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的变量。

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”的中间件函数,并将一个名为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-session和compression。


上一篇:路由

下一篇:使用中间件


http://www.niftyadmin.cn/n/2890398.html

相关文章

高性能计算之八-计算模式的演进

CAX软件的普及完全得益于PC的普及&#xff0c;因此&#xff0c;CAX软件的交互习惯与应用体验源自PC&#xff0c;但是PC的性能瓶颈、稳定性缺陷及分散管控模式&#xff0c;为CAX数据平台化生产模式进化埋下了非常多的隐患&#xff0c;我们亟需在CAX生产模式与CAX应用体验之间寻找…

基于idea-SSM的在线投稿审稿系统-稿件管理-作者管理-稿件审核(javaweb-php-asp.netC#-j2ee)

目录 1 概述 2 数据库表 3 关键代码 4 效果演示 ​ 1 概述 本文主要阐述如何构建一个基于JSP等Web技术优化的B/S架构下的投稿&#xff0c;审稿&#xff0c;查询网站。从它的需求方面、系统的结构和原理、及基本设计思想、主要功能、具体实现的技术、具体的实现方法、存在的…

基于idea-SSM班级管理系统(javaweb-php-asp.netC#-j2ee)包含学生日常信息管理学生会选举投票管理

目录 0、效果展示 ​1、概述 2、搭建环境 3、数据表 ​4、后端代码示例 5、前端代码示例 0、效果展示 1、概述 在系统中&#xff0c;要求对不同的用户设置不同的权限&#xff0c;系统针对不同权限下的用户授予其对数据库进行操作&#xff0c;并限制该用户对数据库作超越权…

Memcached学习笔记——windows上初步使用

最近一直在做一个项目的前期设计工作&#xff0c;考虑到后期系统的扩展和性能问题也找了很多解决方法&#xff0c;有一个就是用到了数据库的缓存工具memcached&#xff08;当然该工具并不仅仅局限于数据库的缓存&#xff09;。先简单的介绍下什么是memcached。 Memcached是高性…

Java面试笔试题大汇总二(最全+详细答案)

Java面试笔试题大汇总一&#xff08;最全详细答案&#xff09;https://www.jianshu.com/p/73b6b3d35676Java面试笔试题大汇总三&#xff08;最全详细答案&#xff09;https://www.jianshu.com/p/3e9a7073e60e 51、类ExampleA继承Exception&#xff0c;类ExampleB继承ExampleA。…

OpenCV4新API:QRCode识别

为什么80%的码农都做不了架构师&#xff1f;>>> import cv2 import numpy as npimg cv2.imread(/opt/develop/resources/images/1546100572.png) img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)result_detection None count_experiments 10 transform None q…

js连接多行字符串

list "aaaa\ bbbb\ cccc ";

基于idea-SSM协同过滤算法的图书借阅管理系统开发与制作(javaweb-php-asp.netC#-j2ee)包含借阅个性化推荐统计分析

目录 0、效果展示 1、协同过滤算法的图书借阅管理系统概述 2、协同过滤算法的图书借阅管理系统搭建环境 3、协同过滤算法的图书借阅管理系统数据表结构 ​4、后端代码示例 5、前端代码示例 0、效果展示 1、协同过滤算法的图书借阅管理系统概述 个性化推荐&#xff1a;依据…

HttpFox - 网络传输检测利器

HttpFox是一款火狐的抓包插件&#xff0c;可以抓取页面上眼睛能看到的&#xff0c;耳朵能听到的绝大部分内容&#xff0c;这个插件很像IE的那两款抓包插件HttpWatch 或 IEInspector &#xff0c;使用方法也差不多&#xff0c;对于我们前端开发&#xff0c;特别是ajax数据调试是…

JS中鲜为人知的问题: [] == ![]结果为true,而 {} == !{}却为false

console.log( [] ![] ) // true console.log( {} !{} ) // false 在比较字符串、数值和布尔值的相等性时&#xff0c;问题还比较简单。但在涉及到对象的比较时&#xff0c;问题就变得复杂了。最早的ECMAScript中的相等和不相等操作符会在执行比较之前&#xff0c;先将对象转…

针对某五金电子厂的企业网站进行模拟SQL注入来谈 企业网站安全的攻击与防范-网站安全漏洞剖析实例 (适应于idea-SSMjavaweb-php-asp.netC#-j2ee)

目录 1 用来模拟入侵的网站效果 2 概述 3 SQL注入原理 4 判断能否进行SQL注入 5 判断数据库类型及注入方法 6 SQL注入 7 SQL注入攻击的防范 8 SQL注入攻防演示录相 1 用来模拟入侵的网站效果 2 概述 SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用…

JAVA消息摘要用处

网络计算环境中很多时候需要对文件进行消息摘要计算&#xff0c;防止文件被篡改&#xff0c;校验文件是否被修改过&#xff0c;JDK本身提供了消息摘要算法&#xff0c;使用起来相当方便&#xff0c;主要用到安全摘要计算类 java.security.MessageDigest&#xff0c;如下&#…

基于idea-SSM的人事管理系统(javaweb-php-asp.netC#-j2ee)包含员工管理-招聘管理-部门管理-职称管理-员工统计-薪资管理-奖惩管理

目录 1 人事管理系统概述 2 人事管理系统数据库表 3 人事管理系统关键代码 4 人事管理系统效果演示 1 人事管理系统概述 此人事管理系统将办公自动化与人事管理进行了良好的结合&#xff0c;使单位各部门工作人员都能方便&#xff0c;及时地获得所要人员的各种信息&#xff…

在pfSense中配置多WAN负载平衡和故障转移

多wan设置能增加互联网带宽&#xff0c;可以根据需要对带宽进行负载平衡和故障转移。如果一个连接断开&#xff0c;流量将自动路由到备份连接。在本教程中&#xff0c;我们来配置pfSense的多WAN设置&#xff0c;以实现负载平衡和故障转移。基本要求来自两个不同ISP的两个互联网…

软件开发中思考的重要性

在现在这个浮躁的时期&#xff0c;再加上敏捷咨询师们念的歪经&#xff0c; 他们让人感觉上就像是软件产品是可以在很短的时间内高质量的完成的&#xff0c; 这令那些管理者们很兴奋&#xff0c;就像巴甫洛夫的条件反射实验中的狗看到了肉就像流口水那样兴奋。 他们使用TDD&…

idea开发SSM框架的高校大学学生社团管理网站bootstrap自适应响应式前端(javaweb-php-asp.netC#-j2ee)包含公告管理-社团活动管理-社团申请管理-社团审核-活动报名

目录 0、效果展示 1、概述 2、社团管理网站搭建环境 3、数据表结构 ​4、后端代码示例 5、前端代码示例 0、效果展示 1、概述 高校学生社团是高校学生依据兴趣爱好自愿组成&#xff0c;按照章程自主开展活动的学生组织。学生社团是高校校园文化的重要载体&#xff0c;是高…
最新文章