node.js - 在发送到浏览器之前过滤 Node.js 响应( header 和正文)?

标签 node.js

我正在寻找一个基于 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/

相关文章:

javascript - 在 node.js 中需要带有注释的 JSON

javascript - 将参数传递给 setInterval 会导致奇怪的行为

node.js - Graphicsmagick 中的合成图像

jquery - requirejs 客户端/服务器模块与 jquery

node.js - 无法从 Ubuntu 上的 NodeJS 连接到 MongoDB。 OSX 上的相同代码可以正常工作

node.js - 使用 Nodejs (Crypto) 加密文件会引发错误 : bad base64 decode

python - 请求库未通过代理正确引导 HTTP 请求

arrays - 无法读取数组的属性

node.js - WhatsApi 号码被阻止 - NodeJs

node.js - 如何对跨文件的 API 请求进行速率限制? [node.js]