1、原理分析
从上面的使用案例我们可以分析出一下几点:
-
首先,
body-parser
中间件的作用是给req
添加属性body
,值为对象,以键值对的形式存储请求体中的参数; -
其次,
body-parser
只处理POST
请求; -
最后,
body-parser
模块导出一个对象,上面有两个方法urlencoded
和json
,分别处理表单提交和json
格式的请求体参数。
2、分析 urlencoded、json 公共逻辑
在实现之前我们先分析一下两个方法,首先都需要先读取请求体中的内容,数据传输的类型为 Buffer,转换成字符串后会根据提交方式不同而导致请求体中的内容是查询字符串或者是 json
字符串的区别。
当解析失败时都需要做错误处理,当不是 POST
请求时都需要向下执行其他中间件,而最核心的事就是把请求体中的数据转换成对象挂在 req.body
上。
使用的转换数据的方法不同是唯一的区别,能区分两者的就是请求头 Content-Type
的值,因此我们可以把所有的公共逻辑抽取出来用一个 acceptPost
函数来执行。
3、模块的创建
我们下面创建自己的 bod