Recentemente, quando usei o node-http-proxy no meu projeto, encontrei a necessidade de modificar o resultado da resposta do servidor proxy. A biblioteca forneceu uma solução para modificar o formato de resposta para HTML: Harmon, e o formato de retorno no projeto é uniformemente JSON. Parece muito volumoso usá -lo, então escrevi uma biblioteca que pode analisar e modificar o formato JSON.
Durante esse período, também encontrei problemas aos quais não havia prestado atenção antes: codificação de transmissão HTTP e processamento relacionado ao fluxo de nó. Aqui está o código de implementação:
var zlib = requim ('zlib'); var concatstream = requer ('concat-stream');/*** modifique a resposta de json* @param res {Response} a resposta http* @param contentEncoding {string} o http header-coding) modifyResponse (res, contentncoding, retorno de chamada) {var unzip, zip; // agora lida apenas com o gzip e deflate o conteúdo-coding.if (contentEncoding === 'gzip') {unzip = zlib.gunzip (); zip = zlib.gzip); zlib.inflate (); zip = zlib.deflate ();} // O método de resposta do cache pode ser chamado após a modificação.var _write = res.write; var _end = res.end; if (unzip) {unzip.on ('erro', função (e) {console.log ('ziP) {unzip.on ('erro', função (e) {console.log ('zip) e); _ end.call (res);});} else {console.log ('não suportado codificação de conteúdo:' + contentncoding); return;} // o método de resposta de reescrita é substituído por unzip stream.res.write = function (Data) {unzip.write (data);}}; O 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);} // retorno de chamada (corpo);} // converte o json em buffer.body = new buffer (json.stringify (body)); // chama o método de resposta e recupere o conteúdo-coding.zip.on ('dados', function (chunk) {_write.call (res, chunk);});}; {_end.call (res);}); zip.write (body); zip.end ();}); unzip.pipe (concatwrite);};Endereço do projeto: Node-http-proxy-json, todos podem experimentar e dar sugestões, e não são mesquinhos com Star.
Na implementação desta biblioteca, tornei -me cada vez mais consciente da importância do conhecimento teórico. A chamada teoria é o precursor da ação. Eu usei bibliotecas de terceiros antes e não me importava com alguns detalhes subjacentes.
Se você tiver tempo mais tarde, deve olhar mais para a implementação subjacente, caso contrário, ficará preso quando encontrar problemas difíceis.
O exposto acima é o código de exemplo do resultado da resposta de modificação do node-http-proxy introduzido pelo editor. Espero que seja útil para todos!