最近、プロジェクトでnode-http-proxyを使用したとき、プロキシサーバーの応答結果を変更する必要性に遭遇しました。ライブラリは、HTML:Harmonへの応答形式を変更するソリューションを提供しており、プロジェクトの返品形式は均一にJSONです。それを使用するには大きすぎると感じているので、JSON形式を解析して変更できるライブラリを書きました。
この期間中、私は以前に注意を払っていなかった問題にも遭遇しました:HTTP送信エンコードおよびノードストリーム関連処理。これが実装コードです:
var zlib = require( 'zlib'); var concatstream = require( 'concat-stream');/*** json* @param res {response} @param contentencoding* @param contentencoding* @param contentencoding} httpヘッダーコンテンツエンコード:gzip/deflate* @param callback*} cultiaped mods} ModifyResponse(res、contentencoding、callback){var unzip、zip; // gzipとdeflate content-encoding.if(contentencoding === 'gzip'){unzip = zlib.gunzip(); zip = zlib.gzip(); zlib.inflate(); zip = zlib.deflate();} //キャッシュ応答方法は、modification.var _write = res.write; var _end = res.end; if(unzip){unzip.on( 'error'、function(e){console.log( 'unzip error: e); _ end.call(Res);} unzip stream.var concatwrite = concatstream(function(data){var body; try {body = json.parse(data.tostring());} catch(e){body = data.tostring(); console.log( 'json.parse error:'、e);} callback(body);} // jsonをbuffer.bodyに変換します= new buffer(json.stringify(body)); //応答メソッドを呼び出して、content-encoding.zip.on( 'data'、function(chunk){_write.call(res、chunk);}); {_end.call(res);}); zip.write(body); zip.end();}); unzip.pipe(concatwrite);};プロジェクトアドレス:node-http-proxy-json、誰もが試して提案をすることを歓迎し、スターにけいれんしないでください。
このライブラリの実装において、私は理論的知識の重要性をますます認識しました。いわゆる理論は、行動の先駆者です。私は以前にサードパーティのライブラリを使用しましたが、いくつかの根本的な詳細については気にしませんでした。
後で時間がある場合は、基礎となる実装をさらに確認する必要があります。そうしないと、困難な問題に遭遇すると立ち往生します。
上記は、編集者によって紹介されたノード-HTTP-Proxy修正応答結果のコードの例です。私はそれが誰にでも役立つことを願っています!