Node.js:Express( express 路由,express 中间件( 四 )


4. 内置的中间件
自4.16.0 版本开始,内置了 3 个常用的中间件,极大的提高了项目的开发效率和体验:
. 快速托管静态资源的内置中间件,例如: HTML 文件、图片、CSS 样式等(无兼容性).json 解析 JSON 格式的请求体数据(有兼容性,仅在 4.16.0+ 版本中可用) . 解析 URL- 格式的请求体数据(有兼容性,仅在 4.16.0+ 版本中可用)
5. 第三方的中间件
非官方内置的,而是由第三方开发出来的中间件,叫做第三方中间件 。在项目中,大家可以按需下载并配置第三方中间件,从而提高项目的开发效率 。
例如:在 @4.16.0 之前的版本中,经常使用 body- 这个第三方中间件,来解析请求体数据 。使用步骤如下:
运行 npmbody- 安装中间件使用导入中间件调用 app.use() 注册并使用中间件
注意: 内置的 . 中间件,就是基于 body- 这个第三方中间件进一步封装出来的 。
自定义中间件 1. 需求描述与实现步骤
自己手动模拟一个类似于 . 这样的中间件,来解析 POST 提交到服务器的表单数据 。
实现步骤:
定义中间件监听 req 的 data 事件监听 req 的 end 事件使用模块解析请求体数据将解析出来的数据对象挂载为 req.body将自定义中间件封装为模块 2.定义中间件
使用 app.use() 来定义全局生效的中间件,代码如下:
3. 监听 req 的 data 事件
在中间件中,需要监听 req 对象的 data 事件,来获取客户端发送到服务器的数据 。
如果数据量比较大,无法一次性发送完毕,则客户端会把数据切割后,分批发送到服务器 。所以 data 事件可能会触发多次,每一次触发 data 事件时,获取到数据只是完整数据的一部分,需要手动对接收到的数据进行拼接 。
4. 监听 req 的 end 事件
当请求体数据接收完毕之后,会自动触发 req 的 end 事件 。
因此,我们可以在 req 的 end 事件中,拿到并处理完整的请求体数据 。示例代码如下:
5. 使用模块解析请求体数据
Node.js 内置了一个模块,专门用来处理查询字符串 。通过这个模块提供的 parse() 函数,可以轻松把查询字符串,解析成对象的格式 。示例代码如下:
6. 将解析出来的数据对象挂载为 req.body
上游的中间件和下游的中间件及路由之间,共享同一份 req 和 res 。因此,我们可以将解析出来的数据,挂载为 req 的自定义属性,命名为 req.body,供下游使用 。示例代码如下:
7. 将自定义中间件封装为模块
为了优化代码的结构,我们可以把自定义的中间件函数,封装为独立的模块,示例代码如下:
使用写接口 1.创建基本的服务器
2. 创建 API 路由模块
3.编写 GET 接口
4.编写 POST 接口
注意:如果要获取 URL- 格式的请求体数据,必须配置中间件 app.use(.({ : false }))
CORS 跨域资源共享 1. 接口的跨域问题
上面编写的 GET 和 POST接口,存在一个很严重的问题:不支持跨域请求 。
解决接口跨域问题的方案主要有两种:
CORS(主流的解决方案,推荐使用) JSONP(有缺陷的解决方案:只支持 GET 请求) ‘2. 使用 cors 中间件解决跨域问题
cors 是的一个第三方中间件 。通过安装和配置 cors 中间件,可以很方便地解决跨域问题 。使用步骤分为如下 3 步:
3. 什么是 CORS
CORS (Cross-,跨域资源共享)由一系列 HTTP 响应头组成,这些 HTTP 响应头决定浏览器是否阻止前端 JS 代码跨域获取资源 。
浏览器的同源安全策略默认会阻止网页“跨域”获取资源 。但如果接口服务器配置了 CORS 相关的 HTTP 响应头,就可以解除浏览器端的跨域访问限制 。