Express 用于处理请求体的中间件很多,除了标题中提到的三个,还有multiparty、busboy等,multiparty性能上不如busboy,而multer是busboy的顶层封装,效率又提升了一个档次。bodyParser() 内部就是使用了 formidable ,只不过多了一层封装而已。
Bodyparser中间件
这个中间件用于处理第1,3种content-type 的body非常的方便,但不能用于处理multipart类型的body,具体api可见GitHub,提供了四种方法
bodyParser.json() 将body解析为json
bodyParser.text() 将body解析为文本
bodyParser.raw() 将body解析为二进制
bodyParser.urlencoded() 将编码为URLEncoder的body解析出来
Multer 中间件
只处理类型是multipart/form-data的body。它的主要功能是: .single(‘photo’) .array(‘photos’, 12) .fields([])分别对应处理上传文件,批量上传和分类上传,同时也带有处理纯文字的功能,用上面三个方法不带参数即可。
Formidable 中间件
Formidable它的主页上的特性描述看起来很屌的样子,在express中我们用express-formidable ,可用于处理表单和上传文件,功能大而全,可配置项非常多,最大的区别是还提供了一个对象,用于处理各种事件。
常见Content-Type类型有四种:
- application/x-www-form-urlencoded 常见的form提交
- multipart/form-data 文件提交
- application/json 提交json格式的数据
- text/xml 提交xml格式的数据
所以在express框架中,我个人偏向使用multer插件,既能通过req.body接收json格式的参数,又能通过req.file或者req.files接收文件。
备注:
在实际使用过程中,因为multer以及body-parser是express官方文档指出的中间件,所以使用起来的参考性更强一些。formidable在使用的过程中,因为form.parse的触发问题,无法很贴合express框架去使用(我还在探索,暂时当做nodejs原生使用的该中间件,如果有人有例子,希望可以给我消息,我学习借鉴一下,还在学习中,此篇文章暂时先如此,有时间将这块解决)。