扫码关注官方订阅号
对于node开发来说,对express应该都是使用很多的,但是它就像一个黑匣子一样,并不知道内部的情况。像var app=new express(); app.use('中间件')这句的原理是怎样的,要是自己模拟,要如何实现那?
var app=new express(); app.use('中间件')
欢迎选择我的课程,让我们一起见证您的进步~~
简单说下express的中间件机制:
express
// 定义一个空数组,存放我们所有的`中间件` const middlewares = []; // 定义app的use方法 app.use = function(middleware) { // 每次use一个新的中间件(其实就是一个函数),实际上是往middlewares数组中添加该middleware middlewares.append(middleware); } /* 中间件的代码其实就是上面写的那么简单(当然我简化了很多,但是思想就是这么一回事) 接下来我们来聊聊中间件是如何起作用的 */ // 首先记住每个middleware的形式如下 function(req, res, next) { } // 假设现在我们有两个中间件m1, m2如下 const m1 = function(req, res, next) { req.m1 = 'm1'; next(); } const m2 = function(req, res, next) { res.m2 = 'm2'; next(); } /* 当一个请求到来的时候 1. 中间件机制会先执行m1函数,然后对req和res做一些操作 2. m1执行到最后的时候会调用`next()`,在这里也就是m2,也就是说调用`next()`的时候实际上调用m2函数 3. m2重复上面的操作,调用它之后的中间件,直到你的业务代码 4. 通过上述中间件,你的业务代码可以获取额外的req和res的属性,也就是上面列出的req.m1和res.m2 */
一点说明:express中的next()的调用其实是不带req,res,next这些参数的,之所以可以这样,是因为它对每个middleware函数做了一些修改,拿上面的m1函数来说,它的next其实可以想成做了如下处理next = m2.bind(req, res, m2后的下一个middleware)
next()
req
res
next
middleware
m1
next = m2.bind(req, res, m2后的下一个middleware)
ps: 换个角度思考,中间件其实就是对req, res这两个对象的属性加以增强的函数而已
pps: express中的中间件机制其实不是很复杂,建议楼主直接看看源码
如果想了解的话可以看下connect的源码,200来行,express基于connect
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
简单说下
express的中间件机制:一点说明:
express中的next()的调用其实是不带req,res,next这些参数的,之所以可以这样,是因为它对每个middleware函数做了一些修改,拿上面的m1函数来说,它的next其实可以想成做了如下处理next = m2.bind(req, res, m2后的下一个middleware)ps: 换个角度思考,中间件其实就是对
req,res这两个对象的属性加以增强的函数而已pps:
express中的中间件机制其实不是很复杂,建议楼主直接看看源码如果想了解的话可以看下connect的源码,200来行,express基于connect