Expressjs 原始正文

新手上路,请多包涵

如何访问 expressjs 给我的请求对象的原始主体?

 var express = require('./node_modules/express');
var app = express.createServer();
app.post('/', function(req, res)
{
    console.log(req.body); //says 'undefined'
});
app.listen(80);

原文由 Andrey Kon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 529
2 个回答

默认 express 不缓冲数据,除非您添加中间件。简单的解决方案是按照下面@Stewe 的答案中的示例进行操作,这将自己连接所有数据。例如

var concat = require('concat-stream');
app.use(function(req, res, next){
  req.pipe(concat(function(data){
    req.body = data;
    next();
  }));
});

这样做的缺点是您现在已经将所有 POST 正文内容作为一个连续的块移动到 RAM 中,这可能不是必需的。另一个值得考虑但取决于您需要在帖子正文中处理多少数据的选项是将数据作为流处理。

例如,对于 XML,您可以使用支持解析 XML 的 XML 解析器,因为它以块的形式出现。 XML Stream 就是这样一种解析器。你做这样的事情:

 var XmlStream = require('xml-stream');

app.post('/', function(req, res) {
  req.setEncoding('utf8');
  var xml = new XmlStream(req);
  xml.on('updateElement: sometag', function(element) {
    // DO some processing on the tag
  });
  xml.on('end', function() {
    res.end();
  });
});

原文由 loganfsmyth 发布,翻译遵循 CC BY-SA 3.0 许可协议

这样的事情应该有效:

 var express = require('./node_modules/express');
var app = express.createServer();
app.use (function(req, res, next) {
    var data='';
    req.setEncoding('utf8');
    req.on('data', function(chunk) {
       data += chunk;
    });

    req.on('end', function() {
        req.body = data;
        next();
    });
});

app.post('/', function(req, res)
{
    console.log(req.body);
});
app.listen(80);

原文由 stewe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题