최근 프로젝트에서 Node-HTTP-Proxy를 사용했을 때 프록시 서버 응답 결과를 수정해야합니다. 라이브러리는 HTML : Harmon에 대한 응답 형식을 수정하는 솔루션을 제공했으며 프로젝트의 리턴 형식은 균일하게 JSON입니다. 사용하기에는 너무 부피가 느껴져서 JSON 형식을 구문 분석하고 수정할 수있는 라이브러리를 썼습니다.
이 기간 동안, 나는 또한 이전에주의를 기울이지 않은 문제를 겪었습니다 : HTTP 전송 인코딩 및 노드 스트림 관련 처리. 구현 코드는 다음과 같습니다.
var zlib = require ( 'zlib'); var concatstream = require ( 'concat-stream');/*** json* @param res {response} http 응답* @param contentencoding {string}의 응답을 수정합니다. modifyResponse (res, contentencoding, callback) {var unzip, zip; // 이제 gzip을 다루고 contentencoding.if (contentencoding === 'gzip') {unzip = zlib.gunzip (); zip = zlib.gzip (); else if = elseflate ') zlib.inflate (); zip = zlib.deflate ();} // 수정 후 캐시 응답 메소드를 호출 할 수 있습니다 .var _write = res.write; var _end = res.end; if (unzip) {unzip.on ( 'error', function (e) {console.log ( 'unzip 오류 :'); else {console.log ( '지원되는 컨텐츠 인코딩 :' + contentencoding); return;} // unzip stream.res.write = function (data) {unzip.write (data);}; res.end = function (data) {unzip.end (data); // concat. (data) {var body; try {body = json.parse (data.toString ());} catch (e) {body = data.toString (); console.log ( 'json.parse error :', e);} // custom 수정 된 logicif (body = callback (body = callback); 버퍼 (json.stringify (body)); // 응답 메소드를 호출하고 content-encoding.zip.on ( 'data', function (chunk) {_write.call (res, chunk);} ( 'end', function () {_end.call (res);}); zip.write (body); zip.end ();}); unzip.pipe (concatwrite);};프로젝트 주소 : Node-HTTP-Proxy-JSON, 모든 사람들은 시험을 치르고 제안을 할 수 있으며 스타에 인색하지 않습니다.
이 라이브러리의 구현에서, 나는 이론적 지식의 중요성을 점점 더 많이 알게되었습니다. 소위 이론은 행동의 선구자입니다. 나는 이전에 타사 도서관을 사용했지만 몇 가지 기본 세부 사항에 신경 쓰지 않았습니다.
나중에 시간이 있다면, 기본 구현을 더 살펴 봐야합니다. 그렇지 않으면 어려운 문제가 발생할 때 갇히게됩니다.
위는 편집기가 소개 한 Node-HTTP-Proxy 수정 응답 결과의 예제 코드입니다. 나는 그것이 모두에게 도움이되기를 바랍니다!