app.use(bodyParser.json());
客戶端請求介面時如果指名請求頭型別 為Content-Type=application/json
bodyParser 會自動將 body 裡的 json 格式資料正確解析,
// bodyParser 依賴 raw-body 庫,raw-body庫裡面有這樣一段程式碼
function cleanup() { received = buffer = null stream.removeListener('data', onData) stream.removeListener('end', onEnd) stream.removeListener('error', onEnd) stream.removeListener('close', cleanup) }
這樣導致在express裡面req監聽on, end事件是不會執行的.要想在express裡面拿到request的原始資料
可以再註冊bodyPaser之前先把原始資料儲存起來.程式碼如下:
app.use(function(req, res, next){ var reqData = []; var size = 0; req.on('data', function (data) { console.log('>>>req on'); reqData.push(data); size += data.length; }); req.on('end', function () { req.reqData = Buffer.concat(reqData, size); }); next(); }); app.use(bodyParser.json()); app.use(bodyParser.urlencoded());