我正在寻找一个基于 node-http-proxy 构建的 NPM 模块但添加了缓存支持,如鱿鱼/清漆,但在 Node.js 中。
在我看来,它会像这样工作:
- 我的 NPM 模块不会依赖于 http-proxy,只会“包装”给
http.createServer
的任何回调。这个想法是将其与 http-proxy 结合起来,但它并不这么认为。 - 它将查看
req
,如果它有缓存版本,它将提供该版本。 - 如果没有,它将委托(delegate)给原始回调,检查响应以查看是否可以缓存。
- 进行缓存,并返回实际响应。
逻辑非常简单,但我对 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 概念新手指南”,请指导我阅读此内容。我不是懒,我只是迷路了。
编辑|看起来我可以在响应上对 write()
和 writeHead()
进行方法调配以拦截对它们的调用,但这感觉不对。
最佳答案
看起来像是重新定义 ServerResponse 的 write 和 writeHead 方法这样做的唯一方法。 Node API 没有原生事件来处理传出数据。
关于node.js - 在发送到浏览器之前过滤 Node.js 响应( header 和正文)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11951184/