我正在寻找构建在node-http-proxy之上但添加缓存支持的 NPM 模块,如 squid/varnish,但在 node.js 中。
在我的脑海中,它会像这样工作:
- 我的 NPM 模块不依赖于 http-proxy,只会“包装”任何给
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 的完全缺乏理解并且应该阅读某种“node.js 概念的新手指南”,请指导我。我不是懒惰,我只是迷路了。
EDIT | Looks like I can method-swizzle write()
and writeHead()
on the response to intercept the invocations to them, but this feels wrong.