Недавно, когда я использовал Node-HTTP-Proxy в своем проекте, я столкнулся с необходимостью изменения результата ответа прокси-сервера. Библиотека предоставила решение для изменения формата ответа на HTML: HARMON, а формат возврата в проекте - равномерно JSON. Это кажется слишком громоздким, чтобы использовать его, поэтому я написал библиотеку, которая может проанализировать и изменить формат JSON.
В течение этого периода я также столкнулся с проблемами, на которые я не обращал внимания ранее: кодирование передачи HTTP и обработка потока узлов. Вот код реализации:
var zlib = require ('zlib'); var concatstream = require ('concat-stream');/*** изменять ответ json* @param res {response} http response* @param contentencoding {string} http Header Content-encoding: gzip/deflate* @param callback {function} modificed modified vocport-modure. ModifyResponse (res, ContentEcoding, Callback) {var unzip, Zip; // Теперь только GZIP и Deflate Content-Encoding.if (ContentEncoding === 'gzip') {unzip = Zlib.gunzip (); Zip = zlib.gzip (); zlib.inflate (); zip = zlib.deflate ();} // Метод ответа на кэш можно вызвать после модификации.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 ('не поддерживается содержимого-кодирование:' + contentEcoding); return;} // метод перезаписывания ответа заменяется unzip Stream.res.write = function (data) {unzip.write (data);}; unzip Stream.var concatwrite = congatStream (function (data) {var body; try {body = json.parse (data.tostring ());} catch (e) {body = data.toString (); console.log ('json.parse ошибка:', e);} // Custom Modified LogiCif (typeFBECK == FUMTIO Callback (body);} // преобразование json в buffer.body = new Buffer (json.stringify (body)); // вызовать метод ответа и восстановить контент-encoding.zip.on ('data', function (chunk) {_write.call (res, chunk);}); zip.on (end ', function () function () {_end.call (res);}); zip.write (body); Zip.end ();}); unzip.pipe (concatWrite);};Адрес проекта: Node-HTTP-Proxy-Json, все могут попробовать и дать предложения, и не будьте скупы со звездой.
В реализации этой библиотеки я все больше и больше осознавал важность теоретических знаний. Так называемая теория является предшественником действия. Я использовал сторонние библиотеки раньше, и мне было все равно, что некоторые основные детали.
Если у вас есть время позже, вы должны больше взглянуть на основную реализацию, иначе вы застрянете, когда столкнетесь с трудными проблемами.
Выше приведено пример кода Node-HTTP-Proxy Result Resound, введенный вам редактором. Я надеюсь, что это будет полезно для всех!