0

さまざまな API を呼び出すときにリクエストとレスポンスを確認できるように、デバッグ プロキシを構築しようとしていますが、元のメソッドにデータを送信しようとしているところに行き詰まっています。

チャンクを元のメソッドにも送信するにはどうすればよいですか?

var httpProxy = require('http-proxy');

var write2;

function write (chunk, encoding) {

    /*  
        error: Object #<Object> has no method '_implicitHeader'
        because write2 is not a clone.
    */
    //write2(chunk, encoding);

    if (Buffer.isBuffer(chunk)) {
        console.log(chunk.toString(encoding));
    }
}


var server = httpProxy.createServer(function (req, res, proxy) {

    // copy .write
    write2 = res.write;
    // monkey-patch .write
    res.write = write;

    proxy.proxyRequest(req, res, {
        host: req.headers.host,
        port: 80
    });

});

server.listen(8000);

私のプロジェクトはこちらです。

4

1 に答える 1

0

JavaScript のわずかな変更: 関数の複製

Function.prototype.clone = function() {
    var that = this;
    var temp = function temporary() { return that.apply(this, arguments); };
    for( key in this ) {
        Object.defineProperty(temp,key,{
          get: function(){
            return that[key];
          },
          set: function(value){
            that[key] = value;
          }
        });
    }
    return temp;
};

複製された関数のプロパティへの変更が複製されたオブジェクトに反映されるように、getter と setter を使用するように複製の割り当てを変更しました。

これで、write2 = res.write.clone() のようなものを使用できます。

もう 1 つ、この関数をプロトタイプ割り当てから通常のメソッドに変更したい場合があります (関数をクローンに渡します)。

于 2012-07-10T11:40:06.310 に答える