简述 express中间件
Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件。
浏览器向服务器发送一个请求后,服务器直接通过request.定位属性的方式得到通过request携带过去的数据(有用户输入的数据和浏览器本身的数据信息)。这中间就一定有一个函数将这些数据分类做了处理,已经处理好了,最后让request对象调用使用,对的,这个处理数据处理函数就是我们要说的 中间件 。由此可见,中间件可以总结以下几点:
1、封装了一些处理一个完整事件的功能函数。
2、非内置的中间件需要通过安装后,require到文件就可以运行。
3、封装了一些或许复杂但肯定是通用的功能。
由此可见,中间件在Express开发中的重要性,因此这里我们就专门来具体说一下中间件。
中间件的结构
1、app.use([path],function)
path:是路由的url,默认参数‘/',意义是路由到这个路径时使用这个中间件
中间件其是一个函数,在响应发送之前对请求进行一些操作,这个中间件函数可以理解为就是function(request,response,next){
//做该干的事情
//做完调用下一个函数
Next()
}
这个函数有些不太一样,它还有一个next参数,而这个next也是一个函数,它表示函数数组中的下一个函数
函数数组又是什么意思呢
express内部维护一个函数数组,这个函数数组表示在发出响应之前要执行的所有函数,也就是中间件数组
使用app.use(fn)后,传进来的fn就会被扔到这个数组里,执行完毕后调用next()方法执行函数数组里的下一个函数,如果没有调用next()的话,就不会调用下一个函数了,也就是说调用就会被终止。
下面具体代码 实现下 就简单易懂了
1 app.use((req,res,next)=>{ 2 3 console.log('11'); 4 5 next(); 6 7 console.log('111'); 8 9 }) 10 11 app.use((req,res,next)=>{ 12 13 console.log('22'); 14 15 next(); 16 17 console.log('222'); 18 19 }); 20 21 app.use((req,res,next)=>{ 22 23 console.log('33'); 24 25 next(); 26 27 console.log('333'); 28 29 });
这段代码的输出结果为
11 22 33 333 222 111
可以看到在执行完下一个函数后又会回到之前的函数执行next()之后的部分