2014-04-13 45 views
1

我處理POST請求,像這樣:在Express.js應用程序中,如何獲取源POST數據(原始字符串)?

app.post('/somepage', function (req, res) { 

    var post_data = req.body; 

}); 

這裏,req.body已經是一個JavaScript對象(我試過console.log(req.body),並在服務器的控制檯有[object Object])。我想獲得與HTTP請求一起發送的原始POST數據字符串。那可能嗎?

注:我使用此中間件:

app.use(express.json()); 
app.use(express.urlencoded()); 
+0

http://docs.nodejitsu.com/articles/HTTP/servers/how-to-read-POST-data – adeneo

回答

-2

app.post( '/ SomePage的',函數(REQ,RES){

var post_data = req.body.toString(); 

});

+0

請不要猜測。 1.它不起作用。 (輸出是「[object Object]」)2.我需要**原始源數據**(在ToObject()轉換之前)。我明顯可以將對象轉換爲字符串,如果我想。 –

1

這裏有一個解決方案,可能的工作:

// ... 

app.use(function(req, res, next) { 
    var buffer = ''; 
    req.on('data', function(data) { 
    buffer += data.toString(); 
    }).on('end', function() { 
    req.bodyraw = buffer; 
    }); 
    next(); 
}); 
app.use(express.json()); 
app.use(express.urlencoded()); 

// ... 

app.post('/somepage', function (req, res) { 
    var rawpost = req.bodyraw; 
}); 

它應該是安全的,因爲JSON和urlencoded的中間件插件(數據)事件立即處理,但它會更好,如果第一個中間件做pause()而如果json和urlencoded中間件在看到一個明確暫停的流時做了resume()--這可以保證不會丟失任何數據。

+0

限制請求體的大小是明智的。否則,有人可能會用垃圾填充服務器的RAM,並關閉應用程序。 – josh3736

+0

@ josh3736我希望這只是爲了臨時/調試目的,而不是實際生產,但是你是對的。中間件堆棧中應該有更高的請求大小限制函數。 – mscdex

+0

不應該提到,這不適用於使用最新版本的快遞?因爲我無法獲得有關收集r​​awdata的這些示例工作..也許我可能會做錯什麼:( –

0

您正在尋找'body-parser'中間件。你有幾種選擇來獲得身體,包括raw bufferas text

相關問題