2014-04-13 34 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

相关问题