在发送到浏览器之前过滤一个node.js响应(头文件和正文)?

我正在寻找一个build立在node-http-proxy之上的NPM模块,但增加了caching支持,比如squid / varnish,但是在node.js中。

在我的脑海里,它会像这样工作:

  • 我的NPM模块不会依赖于http-proxy,只会“包装”给http.createServer任何callback。 这个想法是,你把这个与http-proxy结合起来,但是并不假设。
  • 它会看req ,如果它有一个caching版本,它将服务于此。
  • 如果没有,它将委托给原来的callback,检查响应是否可以被caching。
  • caching发生,并返回实际的响应。

这个逻辑非常简单,但是我对node.js的内部和概念并不是很熟悉,而且我甚至不知道如何获取响应的内容。

鉴于这个例子:

 var http = require('http'); http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }) res.write('Hello World!'); res.end(); }).listen(80); 

我将如何从该响应对象获取数据? 理想情况下,我只是“观察”响应,并在写入数据时处理数据,而不是追溯地从数据中取回数据。

我试过了:

 res.on('data', function(chunk) { console.log('Data written: ' + chunk); }); 

但是,这似乎永远不会被调用。

我然后尝试:

 res.connection.on('data', function(chunk) { console.log('Data written: ' + chunk); }); 

但是,这只是倾销请求数据,而不是响应数据。 过滤响应数据的正确方法是什么?假设您对响应的产生方式一无所知?

如果我expression完全不理解节点,并且应该阅读某种“Node.js概念的新手指南”,请指导我。 我不是懒惰的,我只是迷失了。

编辑| 看起来像我可以方法writeHead() write()writeHead()在响应拦截调用他们,但这种感觉是错误的。

看起来像redifinition写和写ServerResponseHead方法的唯一方法来做到这一点。 节点API没有本地事件来处理外发数据。

最简单和最有效的方法是用自定义函数replace这些函数。 当通过myhttp.createServer创buildhttp服务器时,您可以调用http.createServer并拦截function(req, res)callback。 你用你的包装调用原来的res对象replaceres 。 但是你可以添加逻辑loggingres.writeHead调用。