express中间件

 1.中间件的格式

        Express的中间件,本质上就是一个 function 处理函数,Express中间件的格式如下:

        注意:中间件函数的形参列表中,必须包合 next 参数。而路由处理函数中只包含 req 和 res。

// 常量 mw 所指向的,就是一个中间件函数
const mw = function (req, res, next) {console.log("这是一个最简单的中间件函数")// 注意: 在当前中间件的业务处理完毕后,必须调用 next()函数//表示把流转关系转交给下一个中间件或路由next()
}
//客户端发起的任何请求,到达服务器之后,都会触发的中间件,叫做全局生效的中间件
//通过调用 app.use(中间件函数),即可定义一个全局生效的中间件
app.use(mw)//------定义全局中间件的简化形式------
app.use(function(req, res, next) {console.log('这是一个简化过的中间件函数')next()
}

2.next函数的作用

        next 函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由。

3.中间件的作用

        多个中间件之间,共享同一份 reqres。基于这样的特性,我们可以在上游的中间件中,统一为 req 或res 对象添加自定义属性方法,供下游的中间件或路由进行使用。

4.定义多个全局中间件

        可以使用 app.use() 连续定义多个全局中间件。客户端请求到达服务器之后,会按照中间件定义的先后顺序依次进行

app.use(function(req,res,next){ // 第1个全局中间件req.one = "这里是第1个全局中间件"onsole.log("调用了第1个全局中间件")next()
})
app.use(function(req,res,next){ // 第2个全局中间件req.two = "这里是第2个全局中间件"console.log("调用了第2个全局中间件 ")next()
})
app.get('/user', (req,res) =>  {// 请求这个路由,会依次触发上述两个全局中间件res . send( req.one + "——" + req.two + "——" + " Home page . " )    //这里是第1个全局中间件——这里是第2个全局中间件——Home page .
})

5.局部生效的中间件

不使用 app.use() 定义的中间件,叫做局部生效的中间件

//定义中间件函数 mw1
const mw1 = function(req, res, next) {console.log("这是中间件函数")next()
)}
// m1 这个中间件只在”当前路由中生效”,这种用法属于"局部生效的中间件"
app.get("/", mw1, function(req, res) {res.send( "Home page ." )
)}
/ mw1 这个中间件不会影响下面这个路由
app.get("/user", function(req, res) ( res.send( "user page.") 
)}

6.定义多个局部中间件

可以在路由中,通过如下两种等价的方式,使用多个局部中间件

//以下两种写法是"完全等价"的,可根据自己的喜好,选择任意一种方式进行使用
app.get("/", mw1, mw2, (req, res) => { res.send( "Home page." ) })
app.get("/", [mw1,mw2], (req, res) => { res.send( "Home page." ) })

7.了解中间件的5个使用注意事项

        1)一定要在路由之前注册中间件

        2)客户端发送过来的请求,可以连续调用多个中间件进行处理

        3)执行完中间件的业务代码之后,不要忘记调用 next()函数

        4)为了防止代码逻辑混乱,调用 next()函数后不要再写额外的代码

        55)连续调用多个中间件时,多个中间件之间,共享 req 和 res 对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/219259.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WorkPlus稳定服务助力行业千万用户,打造无界沟通协作平台

在企业移动数字化领域,WorkPlus以其十年如一日的研发实力和千万级用户案例,成为众多企业首选的移动数字化平台。究竟是什么样的力量支撑着WorkPlus在市场上占据如此重要的地位呢?接下来,让我们一起揭开WorkPlus的神秘面纱&#xf…

【精选】框架初探篇之——MyBatis的CRUD及配置文件

MyBatis增删改查 MyBatis新增 新增用户 持久层接口添加方法 void add(User user);映射文件添加标签 <insert id"add" parameterType"com.mybatis.pojo.User">insert into user(username,sex,address) values(# {username},# {sex},# {address}) <…

如何找出excel中两列数据中不同的值(IF函数的用法)

第一部分&#xff0c;举例&#xff1a; 例1&#xff1a; 如下图所示&#xff0c;A列和B列是需要比较的数据&#xff0c;C列为对比规则&#xff1a;IF(A2B2,"是","否") 示例图 例2&#xff1a;给B列的成绩评等级 C列的规则&#xff1a; IF(B2>85,&qu…

京东数据采集(京东数据运营):怎样快速获取京东市场大数据?

相信京东平台的很多品牌方们都有做数据分析的需求&#xff0c;但面对多而杂的市场数据&#xff0c;很多运营者都没有思路。单依靠肉眼来看&#xff0c;很多商品的类目、销售成绩、价格分布等运营者也未必清楚。 其实对于京东平台上市场数据的获取&#xff0c;品牌可以直接借助一…

服务号和订阅号哪个好

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;在推送频率上来看&#xff0c;服务号每月能推送四条消息&#xff0c;而订阅号可以每天&#xff08;24小时&#xff09;推送一条消息。如果企业开通公众号的目的是提供服务&#xff0c;例如售前资讯…

【从浅识到熟知Linux】基本指定之cat、more和less

&#x1f388;归属专栏&#xff1a;从浅学到熟知Linux &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;每日一句&#xff1a;写完这篇我要去吃晚饭啦&#xff01;&#xff01; 文章前言&#xff1a;本文介绍cat、more和less指令三种查看文件的用法并给出示例和截图…

HCIA-Datacom跟官方路线学习第二部分

接着前面第六章&#xff0c;通过VLAN技术&#xff0c; 可以将物理的局域网划分成多个广播域&#xff0c; 实现同一VLAN内的网络设备可以直接进行二层通信&#xff0c; 不同VLAN内的设备不可以直接进行二层通信。 第七章 生成树 在以太网交换网络会使用冗余链路&#xff0c; 但…

为什么网上大量程序员卡35岁年龄招聘,而从来不报道测试、技术支持、售前售后工程师呢?

其实&#xff0c;网上只报道程序员卡35岁&#xff0c;这个说法并不成立。 而是普遍卡35岁&#xff0c;但并没有明确的一个职业类别。 随便搜一下&#xff0c;一眼望过去&#xff0c;其实已经波及很多行业了。 但如果你把IT从业人员合并报道&#xff0c;确实容易给人一种“程序…

【全网首发】2023年NOIP T1词典详解

目录 前言 题目详解 AC代码 结尾 前言 NOIP的第一题我终于终于过了&#xff01; 还是很激动的&#xff0c;所以想把自己的思路和想法写下来供大家参考。 题目详解 首先还没看过题的小伙伴&#xff0c;请看题&#xff1a; 一道题拿来还是得先理解题目。而这道题简单来说…

数据结构—小堆的实现

前言&#xff1a;前面我们已经学习了二叉树&#xff0c;今天我们来学习堆&#xff0c;堆也是一个二叉树&#xff0c;堆有大堆有小堆&#xff0c;大堆父节点大于子节点&#xff0c;小堆父节点总小于子节点&#xff0c;我们在学习C语言的时候也有一个堆的概念&#xff0c;那个堆是…

第二十章 解读PASCAL VOC2012与MS COCO数据集(工具)

PASCAL VOC2012数据集 Pascal VOC2012官网地址&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ 官方发表关于介绍数据集的文章 《The PASCALVisual Object Classes Challenge: A Retrospective》&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/pubs/everi…

MATLAB实战 | MEX文件

应用接口是MATLAB与其他语言相互调用各自函数的方法&#xff0c;MEX文件使MATLAB程序中可以调用或链接其他语言编写的函数&#xff0c;而MATLAB引擎使其他语言程序中可以调用MATLAB函数。 01、MEX文件 MEX是MATLAB Executable的缩写&#xff0c;是MATLAB中用于调用其他语言编写…