前言
何为中间件?
当客户端的请求到达服务器后,nodejs会为请求创建一个请求对象叫request,该对象上包含了请求的信息以及客户端传来的数据。同时也会创建一个响应对象-response,响应对象主要负责将服务器处理的结果返回给客户端。那么在服务端响应结果之前就可以插入多个中间件。中间件就可以理解成一个对请求进行过滤和预处理的东西,但他不会直接对客户端进行响应,而是将处理之后的结果向下传递,这也就是为什么可以插入多个中间件了。
在早先的express版本中,中间件使用了Connect中间件框架,3.0版本的express就移除了除‘express.static’外的全部内置中间件,而在4.0版本的express框架中已经不在依赖Connect。可以说新版的express是一个独立的路由和中间件的web框架。
使用中间件
下面来看看中间件具体的使用
express.static
先来看唯一一个express内置的中间件——static,static中间件是用来处理文件请求的。
body-parser
body-parser是帮助解析post数据的中间件,首先需要安装中间件
- 引入中间件;
- 这个中间件的使用就要放到路由之前了,因为它是对请求数据的处理;
- 使用了该中间件后,请求对象req上就会多出一个body属性,body属性装载的就是请求的数据。通过body就可以拿到请求的参数;
到这里我们演示两个比较重要和常用的第三方中间件,掌握如何使用中中间件之后(就是调用"server.use(…)" )。其他第三方中间件的使用就大同小异了,至于为什么express.static中间件是调用express.static(),而body-parser中间件是调用body.urlencoded(),这就是作者要求的了,具体调用方式和配置参数还要参考文档。
next方法
其实express中间件的原理很简单,express在内部维护一个数组,这个数组盛放的是在发出响应之前要执行的所有函数,也可以理解为中间件数组,每一次use以后,传进来的中间件就会放到到数组中,执行完毕后调用next方法执行数组的下一项,如果没有下一项,那么调用就会终止。
大家可能会有疑问,为什么上面使用的两个中间件并没有看到调用next(),但是程序也可以一直向下走呀?那是因为上面的两个中间件是属于内置和第三方中间件,在其封装好的代码中作者已经将next的调用写了进去,中间件执行完已经调用了next(),只不过我们作为使用者看不到而已。下面通过一个我们自己写的中间件实现的简易body-parser功能更清楚的了解next的使用。
手写中间件,实现简版body-parser
2.然后在server.js中引入我们写的中间件,这里的body-parser就不是第三方的body-parser了,而是我们自己写的body-parser。
3.然后在项目根目录创建user.html文件,内部实现一个简单的form表单
在浏览器中访问 http://localhost:8080/user.html
这样一个最简版的body-parser中间件就实现了,其实内部就是对post请求数据的解析处理。当然第三方的中间件里面的逻辑处理要比我们实现的复杂很多,不过原理都是一样的。
底层原理(Connect框架)
其实express中间件的实现依赖了Connect中间件框架,也就是说早先版本的express框架的中间件完全是由另一个独立的框架Connect实现的,Connect也是express框架的作者编写的。在express3.0版本中是包含了Connect框架的。而4.0版本中已经移除了对Connect的依赖,在内部实现了Connect接口。
Connect框架的源码写的还是非常经典的,next的设计尤为巧妙,简单易懂。本篇只是对中间件的使用的介绍,并且还告诉大家如何自己写中间件。
到此这篇node 面试题(node面试题 express和koa区别)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/hd-nodejs/35933.html