当前位置:网站首页 > Node.js开发 > 正文

node 面试题(node面试题 express和koa区别)



前言

何为中间件?

当客户端的请求到达服务器后,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数据的中间件,首先需要安装中间件



  1. 引入中间件;
  2. 这个中间件的使用就要放到路由之前了,因为它是对请求数据的处理;
  3. 使用了该中间件后,请求对象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

node express 数据验证_中间件

这样一个最简版的body-parser中间件就实现了,其实内部就是对post请求数据的解析处理。当然第三方的中间件里面的逻辑处理要比我们实现的复杂很多,不过原理都是一样的。

底层原理(Connect框架)

其实express中间件的实现依赖了Connect中间件框架,也就是说早先版本的express框架的中间件完全是由另一个独立的框架Connect实现的,Connect也是express框架的作者编写的。在express3.0版本中是包含了Connect框架的。而4.0版本中已经移除了对Connect的依赖,在内部实现了Connect接口。

Connect框架的源码写的还是非常经典的,next的设计尤为巧妙,简单易懂。本篇只是对中间件的使用的介绍,并且还告诉大家如何自己写中间件。

到此这篇node 面试题(node面试题 express和koa区别)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • node 环境变量配置(node环境变量配置后查不到版本号)2025-06-08 20:09:09
  • node面试问题(node相关面试题)2025-06-08 20:09:09
  • node更新到最新版本windo(node版本太高怎么办)2025-06-08 20:09:09
  • nvm安装node(nvm安装node命令)2025-06-08 20:09:09
  • node 面试(node面试题2024)2025-06-08 20:09:09
  • 安装node.js(安装node.js后cmd无法识别)2025-06-08 20:09:09
  • nodejs安装出错(nodejs安装步骤)2025-06-08 20:09:09
  • nvm安装node(nvm安装node失败)2025-06-08 20:09:09
  • 升级node版本windows(升级node版本会影响项目吗)2025-06-08 20:09:09
  • 如何升级node版本(升级node.js)2025-06-08 20:09:09
  • 全屏图片