Express 用于處理請(qǐng)求體的中間件很多,除了標(biāo)題中提到的三個(gè)裙秋,還有multiparty桥狡、busboy等,multiparty性能上不如busboy颅围,而multer是busboy的頂層封裝伟葫,效率又提升了一個(gè)檔次。
常見(jiàn)Content-Type類型有四種:
- application/x-www-form-urlencoded 常見(jiàn)的form提交
- multipart/form-data 文件提交
- application/json 提交json格式的數(shù)據(jù)
- text/xml 提交xml格式的數(shù)據(jù)
Bodyparser中間件
這個(gè)中間件用于處理第1,3種content-type 的body非常的方便院促,但不能用于處理multipart類型的body筏养,具體api可見(jiàn)GitHub,提供了四種方法
- bodyParser.json() 將body解析為json
- bodyParser.text() 將body解析為文本
- bodyParser.raw() 將body解析為二進(jìn)制
- bodyParser.urlencoded() 將編碼為URLEncoder的body解析出來(lái)
Multer 中間件
只處理類型是multipart/form-data的body常拓。
它的主要功能是: .single('photo') .array('photos', 12) .fields([])分別對(duì)應(yīng)處理上傳文件渐溶,批量上傳和分類上傳,同時(shí)也帶有處理純文字的功能弄抬,用上面三個(gè)方法不帶參數(shù)即可茎辐。
Formidable 中間件
Formidable它的主頁(yè)上的特性描述看起來(lái)很屌的樣子,在express中我們用express-formidable 眉睹,可用于處理表單和上傳文件,功能大而全,可配置項(xiàng)非常多废膘,最大的區(qū)別是還提供了一個(gè)對(duì)象,用于處理各種事件竹海。
var form = new formidable.IncomingForm()
form.on('fileBegin', function(name, file) {
});
.on('file', function(name, file) {
});
.on('error', function(err) {
});
在實(shí)際開(kāi)發(fā)中,很明顯可以用bodyparser和multer來(lái)分別處理表單和文件丐黄,也可以只用formidable斋配,按需取用即可。