Récemment, lorsque j'ai utilisé Node-Http-Proxy dans mon projet, j'ai rencontré la nécessité de modifier le résultat de la réponse du serveur proxy. La bibliothèque a fourni une solution pour modifier le format de réponse à HTML: Harmon, et le format de retour dans le projet est uniformément JSON. Il semble trop encombrant pour l'utiliser, alors j'ai écrit une bibliothèque qui peut analyser et modifier le format JSON.
Au cours de cette période, j'ai également rencontré des problèmes auxquels je n'avais pas prêté attention auparavant: codage de transmission HTTP et traitement lié au flux de nœuds. Voici le code d'implémentation:
var zlib = require ('zlib'); var concatStream = require ('Concat-stream'); / *** modifier la réponse de JSON * @param res {réponse} la réponse HTTP * @param contentencoding {String} le HTTP Header Content-Encoding: gzip / Deflate * @param callback {function} Custom MODIFIED LOGICA ModifyResponse (res, ContentEncoding, rappel) {var unzip, zip; // ne traite désormais que le gzip et déglaçante le contenu-coding.if (contentencoding === 'gzip') {unzip = zlib.gunzip (); zip = zlib.gzip ();} else if (ContentEnCODing === '' deflate ') {unzip = unzip =} zlib.inflate (); zip = zlib.deflate ();} // La méthode de réponse du cache peut être appelée après la modification.var _write = res.write; var _end = res.end; if (unzip) {unzip.on ('error', function (e) {console.log ('unzip error:',,, fonction (e) {console.log ('unzip error:',,, fonction (e) {console.log ('unzip error:',,, fonction (e) {console.log ('unzip error:',,, fonction (e) {console.log ('unzip erre. e); _ end.call (res);});} else {console.log ('non pris en charge du contenu:' + ContentEncoding); return;} // La méthode de réponse de réécriture est remplacée par unzip stream.res.write = fonction (data) {unzip.write (data);}; 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);} // modify. rappel (corps);} // convertit le json en buffer.body = new tamper (json.stringify (body)); // appelez la méthode de réponse et récupérez le contenu-coding.zip.on ('data', fonction (chunk) {_write.call (res, chunk);}); zip.on ('end', fonction () {_end.call (res);}); zip.write (body); zip.end ();}); unzip.pipe (concatwrite);};Adresse du projet: Node-http-proxy-json, tout le monde est invité à essayer et à faire des suggestions, et ne soyez pas avare avec Star.
Dans la mise en œuvre de cette bibliothèque, je suis devenu de plus en plus conscient de l'importance des connaissances théoriques. La soi-disant théorie est le précurseur de l'action. J'ai déjà utilisé des bibliothèques tierces et je ne me souciais pas de certains détails sous-jacents.
Si vous avez du temps plus tard, vous devez regarder davantage l'implémentation sous-jacente, sinon vous serez coincé lorsque vous rencontrerez des problèmes difficiles.
Ce qui précède est l'exemple de code de Node-Http-Proxy Modification Response Résultat qui vous est introduit par l'éditeur. J'espère que ce sera utile à tous!