在node.js中输出之前更改响应正文

时间:2013-08-08 07:57:17

标签: javascript node.js request pipe

我是Node.js的新手。我正在尝试构建一个小服务器,作为对opendata服务的POST调用的代理,然后做一些事情,绑定到表示层,最后输出到浏览器。

以下是代码:

dispatcher.onGet("/metro", function(req, res) {
  var r = request({body: '<?xml version="1.0" encoding="ISO-8859-1" ?><poirequest><poi_id>87087</poi_id><lng>0</lng></poirequest>'}, function (error, response, body) { 
if (!error && response.statusCode == 200) {
   console.log('Public transformation public API called');
  }
}).pipe(res);

res.on('finish', function() {
  console.log('Request completed;');
});

}); 

http.createServer(function (req, res) {
  dispatcher.dispatch(req, res);
}).listen(1337, '0.0.0.0');
console.log('Server is listening');

调度员是我在mpm上找到的最简单的:https://npmjs.org/package/httpdispatcher 问题是:在输出到输出管道之前,如何更改(基本上是html代码剥离)响应主体?

1 个答案:

答案 0 :(得分:4)

您可以使用类似concat-stream的内容来累积所有流数据,然后将其传递给回调,您可以在回调之前对其进行操作,然后再将其传回浏览器。

var concat = require('concat-stream');

dispatcher.onGet("/metro", function(req, res) {
  write = concat(function(completeResponse) {
    // here is where you can modify the resulting response before passing it back to the client.
    var finalResponse = modifyResponse(completeResponse);
    res.end(finalResponse);
  });

  request('http://someservice').pipe(write);
}); 

http.createServer(dispatcher.dispatch).listen(1337, '0.0.0.0');
console.log('Server is listening');