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,按需取用即可。