内容简介:一个请求发送到服务器,要经历一个生命周期,服务端要: 监听请求-解析请求-响应请求,服务器在处理这一过程的时候,有时候就很复杂了,将这些复杂的业务拆开成一个个子部分,子部分就是一个个中间件。对于处理请求来说,在响应发出之前,可以对请求和该级响应做一些操作,并且可以将这个处理结果传递给下一个处理步骤执行任何代码。修改请求和响应对象。
nodejs(这指express) 中间件
铺垫 :
一个请求发送到服务器,要经历一个生命周期,服务端要: 监听请求-解析请求-响应请求,服务器在处理这一过程的时候,有时候就很复杂了,将这些复杂的业务拆开成一个个子部分,子部分就是一个个中间件。对于处理请求来说,在响应发出之前,可以对请求和该级响应做一些操作,并且可以将这个处理结果传递给下一个处理步骤
express 这样描述中间件的:
执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件
分类 :
应用级中间件
路由级中间件
错误处理中间件
内置中间件
第三方中间件
举个栗子:
var express = require('express'); var app = express(); app.get('/', function(req, res, next) { // req 修改请求 // res 响应对象 next(); // 当前中间件函数没有结束请求/响应循环, 调用next(), // 将控制权传递给下一个中间件函数继续往下处理,否则页面到此会被挂起 }); app.get('/end', function(req, res) { res.send('程序到我这里就结束了,没有next方法'); }) app.listen(3000);
上面next()的说明: next()函数不是nodejs或者express的函数,而是传递中间件函数的第三变量,它是一个统称,可以为任意名称,为了名称统一,不造成混淆,约定为next(),调用它之后会将调用应用程序中的下一个中间件程序
中间件的使用说明:
var express = require('express'); var app = express(); app.use(requestTime); // var requestTime = function(req,res, next) { req.requestTime = new Date().getTime(); next(); } app.get('/time', function(req, res, next) { var timeText = '当前时间为:'; timeText = timeText + req.requestTime; // 这里的req.requestTime 是上一个中间件函数传递过来的, // 一个业务处理流程,多个中间件函数对请求 req进行修改处理,并且通过next() 传递给下一个中间件函数, // 这样下面的中间件函数都能拿到上一个中间件函数处理的结果 res.send(timeText); }); app.get('/end', function(req, res) { res.send('程序到我这里就结束了,没有next方法'); }) app.listen(3000);
下面是多个中间件函数,在各自函数中处理请求和响应的例子:
具体
var express = require('express'); var app = express(); var middleA = function (req, res, next) { req.useOne = '应用程序经过了 middleA '; res.useOne = 'middleA 处理后的数据 middleA'; req.paramasQuery = 1 // console.log(req.useOne, req.useTwo, req.useThree); next(); } var middleB = function (req, res, next) { req.useTwo = '应用程序又经过了 middleB'; res.useTwo = 'middleB 处理后的数据 middleB'; req.paramasQuery += 1; console.log(res.useOne, res.useTwo, res.useThree); next(); } var middleC = function (req, res, next) { req.useThree = '应用程序又经过了 middleC'; res.useThree = 'middleC 处理后的数据 middleC'; req.paramasQuery += 2; console.log(res.useOne, res.useTwo, res.useThree); console.log(req.paramasQuery); next(); } app.use(middleA); app.use(middleB); app.use(middleC); app.get('/', function(req, res, next) { console.log(req.useOne, req.useTwo, req.useThree); // 应用程序经过了 middleA 应用程序又经过了 middleB 应用程序又经过了 middleC // 上面的req里面的参数就是在 不同的中间件函数中处理出来的 console.log(res.useOne, res.useTwo, res.useThree); // middleA 处理后的数据 middleA middleB 处理后的数据 middleB middleC 处理后的数据 middleC // 上面的res的响应参数也是在上面一个个中间件的响应res中逐步处理 累加而得 req.paramasQuery += 3; // req中paramasQuery的参数经过中间不同的中间件函数处理,已经累加到7, // 同理对于res 采用相同的处理方式,也可以达到这样的效果 // 我们以此可以推出,如果处理一个很复杂的程序时,我们一个中间件函数只处理一个步骤, // 并且可以把该步骤处理后的结果,传递给下一个中间件函数处理, // 一种流水线的处理方式,职责专一,效率很快 res.send('req.paramasQuery 经过不同的中间件处理后的结果是:' + req.paramasQuery); // 7 }) app.listen(5000, function() { console.log('5000 端口启动了') })
总结:
express 中间件函数,帮助拆解主程序的业务逻辑,并且每一个的中间件函数处理的结果都会传递给下一个中间件函数。想象一下工厂上流水线工人,在清洗一个箱子的一个场景。第一个人清洗侧面,第二个人清洗底面,第三个人清洗顶面,。。。,这条流水线结束后,箱子也就清洗干净了。
各做各的,不相互影响,又彼此协作。
以上所述就是小编给大家介绍的《express中间件的理解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 理解 Koa 框架中间件原理
- 十分钟理解Redux中间件
- 如何更好地理解中间件和洋葱模型
- Gin 框架系列(三):换个姿势理解中间件
- Gin框架系列03:换个姿势理解中间件
- 消息中间件面试题:消息中间件的高可用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JAVA语言规范(英文版,第3版)
戈斯林 / 机械工业 / 2006-4 / 79.00元
本书由“java之父”Jame Gosling 以及另外三位顶级大师撰写而成,无论是对java语言的初学者还是专业程序员都具有极高的价值,是关于java程序设计语言最权威的技术参考书。 本书侧重于java技术细节和内幕,全面,准确,详尽地介绍了java语言及其语法,论述了java编译器所要检查的语法和java运行模式的各个方面,同时还描述了java语言最重要的新特征。一起来看看 《JAVA语言规范(英文版,第3版)》 这本书的介绍吧!