天天看点

Express中间件,bodyparser,multer,formidable区别浅谈

Express 用于处理请求体的中间件很多,除了标题中提到的三个,还有multiparty、busboy 等,multiparty 性能上不如 busboy,而 multer 是 busboy 的顶层封装,效率又提升了一个档次。

常见Content-Type类型有四种:

  • application/x-www-form-urlencoded 常见的form提交
  • multipart/form-data 文件提交
  • application/json 提交 json 格式的数据
  • text/xml 提交xml格式的数据

Bodyparser中间件

处理类型是 application/x-www-form-urlencoded 和 application/json 格式的表单

这个中间件用于处理第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 ,可用于处理表单和上传文件,功能大而全,可配置项非常多,最大的区别是还提供了一个对象,用于处理各种事件。

var form = new formidable.IncomingForm()
form.on('fileBegin', function(name, file) {
});
.on('file', function(name, file) {
});
.on('error', function(err) {
});
           

在实际开发中,很明显可以用 bodyparser 和 multer 来分别处理表单和文件,也可以只用 formidable,按需取用即可。

继续阅读