node-http-proxy の上に構築され、squid/varnish のようなキャッシング サポートを追加する NPM モジュールを 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.js コンセプトの初心者向けガイド」を読む必要がある場合は、これを参照してください。私は怠け者ではありません。ただ道に迷っているだけです。
編集 | write()
メソッドを切り替えてwriteHead()
、応答でそれらへの呼び出しをインターセプトできるように見えますが、これは間違っているように感じます。