在Express.js应用程序中,如何获取源POST数据(原始字符串)?

时间:2014-04-13 10:49:41

标签: javascript node.js http post express

我正在处理这样的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());

3 个答案:

答案 0 :(得分: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()则更好看到明确暂停的流 - 这可以保证不会丢失任何数据。

答案 1 :(得分:0)

您正在搜索'body-parser'中间件。您可以通过多种方式获取正文,包括raw bufferas text

答案 2 :(得分:-2)

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

var post_data = req.body.toString();

});