Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
xiaqijian opened this issue Mar 27, 2018 · 0 comments
Open

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

xiaqijian opened this issue Mar 27, 2018 · 0 comments

Comments

@xiaqijian
Copy link
Owner

xiaqijian commented Mar 27, 2018

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

常见Content-Type类型有四种:

  1. application/x-www-form-urlencoded 常见的form提交
  2. multipart/form-data 文件提交
  3. application/json 提交json格式的数据
  4. text/xml 提交xml格式的数据

bodyparser

这个中间件用于处理第1,3种content-type 的body非常的方便,但不能用于处理multipart类型的body,具体api可见GitHub,提供了四种方法

  1. bodyParser.json() 将body解析为json
  2. bodyParser.text() 将body解析为文本
  3. bodyParser.raw() 将body解析为二进制
  4. 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,按需取用即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant