我正在寻找一个构建在node-http-proxy之上的NPM模块,但是添加了缓存支持,比如squid / varnish,但是在node.js中。
在我看来,它会像这样工作:
http.createServer
的任何回调。我们的想法是你将它与http-proxy结合起来,但它没有假设。req
,如果它有缓存版本,它将提供此功能。逻辑非常简单,但我对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);
});
但是这只是转储了请求数据,而不是响应数据。假设您对响应的生成方式一无所知,过滤响应数据的正确方法是什么?
如果我表示完全缺乏对节点的理解,应该阅读某种“node.js概念的新手指南”,请指导我。我不是懒惰,我只是迷路了。
编辑|看起来我可以对响应进行方法调整write()
和writeHead()
来拦截对它们的调用,但这感觉不对。
答案 0 :(得分:1)
看起来像ServerResponse的重定义write和writeHead方法是唯一的方法。 Node API没有处理传出数据的本机事件。
答案 1 :(得分:1)
最简单,最有效的方法是使用自定义功能替换这些功能。在myhttp.createServer
创建http服务器时,您调用http.createServer
并拦截function(req, res)
回调。您使用包装器调用原始res
对象替换res
。但您可以添加用于记录res.writeHead
次呼叫的逻辑。