如何访问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);
express除非添加中间件,否则默认值不会缓冲数据。一种简单的解决方案是按照下面@Stewe的答案中的示例进行操作,该示例将自己连接所有数据。例如
express
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(); }); });