Baru-baru ini, ketika saya menggunakan node-http-proxy dalam proyek saya, saya menemukan kebutuhan untuk memodifikasi hasil respons server proxy. Perpustakaan telah memberikan solusi untuk memodifikasi format respons ke HTML: Harmon, dan format pengembalian dalam proyek ini secara seragam JSON. Rasanya terlalu besar untuk menggunakannya, jadi saya menulis perpustakaan yang dapat menguraikan dan memodifikasi format JSON.
Selama periode ini, saya juga mengalami masalah yang belum pernah saya perhatikan sebelumnya: pengkodean transmisi HTTP dan pemrosesan terkait aliran node. Ini kode implementasinya:
var zlib = membutuhkan ('zlib'); var concatstream = membutuhkan ('concat-stream');/*** Ubah respons json* @param res {respons} respons http* @param contentEncoding {string} header http {loader function {loader {function {function {function {function {function {gzip/deflate {export {http function {loader {gzip/deflate {export {loader {gzip/loader {gzip/loader ModifyResponse (res, contentEncoding, callback) {var unzip, zip; // sekarang hanya berurusan dengan gzip dan mengempiskan konten-encoding.if (contentEncoding === 'gzip') {unzip = zlib.gunzip (); zip = zlib.gzip ();}}}}; zlib.inflate (); zip = zlib.deflate ();} // metode respons cache dapat dipanggil setelah modifikasi.var _write = res.write; var _end = res.end; if (unzip) {unzip.on ('error', function (e) {console.log ('unzip) {unzip.on (' error ', function (e) {console.log (' unzip) {unzip.on ('error', function (e) {console.log ('unzip) e); _ end.call (res);});} else {console.log ('tidak didukung-konten-encoding:' + contentEncoding); return;} // metode respons penulisan ulang digantikan oleh unzip stream.res.write = function (data) {unzip.write (data);}; res.end.end = function = Data) {unzip.write (data);}; res.end.end = function = Data) {unzip.write (data);}; res.end the 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);}// Custom modified logicif (typeof callback === 'function') {body = callback (body);} // mengubah json menjadi buffer.body = buffer baru (json.stringify (body)); // panggil metode respons dan memulihkan konten-encoding.zip.on ('data', function (chunk) {_write.call (res, chunk);}); zip.on ('end' end ' {_end.call (res);}); zip.write (body); zip.end ();}); unzip.pipe (concatwrite);};Alamat proyek: Node-http-proxy-json, semua orang dipersilakan untuk mencoba dan memberikan saran, dan jangan pelit dengan bintang.
Dalam implementasi perpustakaan ini, saya menjadi semakin sadar akan pentingnya pengetahuan teoretis. Teori yang disebut adalah cikal bakal tindakan. Saya menggunakan perpustakaan pihak ketiga sebelumnya, dan saya tidak peduli dengan beberapa detail yang mendasarinya.
Jika Anda punya waktu nanti, Anda harus melihat lebih banyak implementasi yang mendasari, jika tidak, Anda akan macet ketika Anda mengalami masalah yang sulit.
Di atas adalah contoh kode respons modifikasi node-http-proxy yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu semua orang!