在发送到浏览器之前过滤一个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
调用。