我期待着写一个建立在node-http-proxy之上的NPM模块,但增加了缓存支持,比如鱿鱼/清漆,但是在node.js中。在发送到浏览器之前过滤node.js响应(标题和正文)?
在我的头,它的工作是这样的:
- 我的NPM模块将不依赖于HTTP代理,以将只是“打包”提供给
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()
来拦截对它们的调用,但是这种感觉是错误的。
现在玩这个方法,谢谢。它不会像我想的那样混乱。 – d11wtq 2012-08-14 13:32:56