2012-08-14 88 views
2

我期待着写一个建立在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()来拦截对它们的调用,但是这种感觉是错误的。

回答

1

看起来像redifinition写和写的方法ServerResponse的唯一办法。 Node API没有处理外发数据的本地事件。

+0

现在玩这个方法,谢谢。它不会像我想的那样混乱。 – d11wtq 2012-08-14 13:32:56

1

最简单和最有效的方法是用您的自定义功能取代这些功能。当通过myhttp.createServer创建http服务器时,您可以拨打http.createServer并拦截function(req, res)回拨。用您的包装调用原始的res对象替换res。但是您可以添加逻辑来记录res.writeHead调用。

+0

看起来像ServerResponse有很多方法来定义我是否要制作一个真正的包装器,所以最好的方法是调整所需的方法(即,重新定义它们)。感谢提供我自己的createServer()实现,它只是委托给http.createServer()。这很有用。 – d11wtq 2012-08-14 12:59:54

相关问题