天天看點

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

繼續閱讀