Recientemente, cuando utilicé Node-HTTP-Proxy en mi proyecto, encontré la necesidad de modificar el resultado de la respuesta del servidor proxy. La biblioteca ha proporcionado una solución para modificar el formato de respuesta a HTML: Harmon, y el formato de retorno en el proyecto es uniformemente JSON. Se siente demasiado voluminoso para usarlo, así que escribí una biblioteca que puede analizar y modificar el formato JSON.
Durante este período, también encontré problemas a los que no había prestado atención antes: codificación de transmisión HTTP y procesamiento relacionado con la corriente de nodo. Aquí está el código de implementación:
var zLib = request ('zLib'); var concatStream = require ('concat-stream');/*** Modifique la respuesta de json* @param res {respuesta} la respuesta http* @param contentEncoding {String} el encabezado HTTP Content-Engoding: gzip/deflate* @Param Callback {function} ModifiDing Custom Mode./Module. ModifyResponse (res, contentEncoding, llamado) {var unzip, zip; // ahora solo trata con gzip y desinflar content-ending.if (contentEncoding ==== 'gzip') {unzip = zlib.gunzip (); zip = zlib.gzip ();} if (contentEncoding == 'deflate') zlib.inflate (); zip = zlib.deflate ();} // El método de respuesta de caché se puede llamar después de la modificación.var _write = res.write; var _end = res.end; if (unzip) {unzip.on ('error', function (e) {console.log ('unzip error:',,,,, ',,,',,, ',' e); _ end.call (res);});} else {console.log ('no compatible con contenido:' + contentEncoding); return;} // El método de respuesta de reescritura se reemplaza por unzip stream.res.write = function (data) {unzip.write (data);}; res.end = function (data) {unzip.end (data); el unzip stream.var concatWrite = concatStream (function (data) {var corporal; try {body = json.parse (data.ToString ());} catch (e) {body = data.ToString (); console.log ('json.parse error:', e);} // logicif modificado (tipo de callback === Callback (Body);} // Convierte el JSON en buffer.body = new Buffer (json.stringify (cuerpo)); // Llame al método de respuesta y recupere el contenido-ending.zip.on ('data', function (chunk) {_write.call (res, chunk);}); zip.on ('end', function () {_end.call (res);}); zip.write (cuerpo); zip.end ();}); unzip.pipe (concatWrite);};Dirección del proyecto: Node-HTTP-Proxy-Json, todos pueden probar y dar sugerencias, y no ser tacaños con Star.
En la implementación de esta biblioteca, me volví cada vez más consciente de la importancia del conocimiento teórico. La llamada teoría es el precursor de la acción. Usé bibliotecas de terceros antes, y no me importaron algunos detalles subyacentes.
Si tiene tiempo más tarde, debe observar más la implementación subyacente, de lo contrario, se atascará cuando encuentre problemas difíciles.
El anterior es el código de ejemplo de resultado de respuesta de modificación de nodo-http-proxy introducido por el editor. ¡Espero que sea útil para todos!