我想建立一個服務器,可以接受與快遞gzip的POST數據。我想我可以編寫自己的中間件來將請求流傳遞給zlib.createGunzip()流。問題是,如何實現這一點,之後,express.bodyParser()中間件仍然能夠解析我的gunzipped POST數據?我如何快速POST gun POST POST請求數據?
我試圖取代用於zlib流的那些原始的請求流的方法,但只是取得了bodyParser返回一個「錯誤的請求」錯誤:
var express = require('express');
var app = express();
function gUnzip(req, res, next) {
var newReq;
if (req.headers['content-encoding'] === 'gzip') {
console.log("received gzipped body");
newReq = req.pipe(zlib.createGunzip());
Object.getOwnPropertyNames(newReq).forEach(function (p) {
req[p] = newReq[p];
});
}
next();
}
app.use(gUnzip);
app.use(express.bodyParser());
app.listen(8080);
有沒有一種方法,使這項工作而不用在我自己的中間件中重寫bodyParser()中間件?編輯: 這是同一個問題:Unzip POST body with node + express。但在答案中,他只是在自己的中間件中做了什麼,express.bodyParser()應該做什麼,這是我想要避免的。我正在尋找一種方法來簡單地從流中解壓縮請求數據,然後將它傳遞給bodyParser(),bodyParser()需要一個流本身,如http://www.senchalabs.org/connect/json.html所示。
如果'刪除req.headers [「內容編碼」]',你不會得到一個壞'再Request',但它仍然沒有按」 t工作:( – robertklep
據我所見,你不能'覆蓋'這樣的請求對象,我想你需要自己實現'bodyParser'功能:( – robertklep