node-http-proxy修改响应结果实例代码


Posted in Javascript onJune 06, 2016

最近在项目中使用node-http-proxy遇到需要修改代理服务器响应结果需求,该库已提供修改响应格式为html的方案:Harmon,而项目中返回格式统一为json,使用它感觉太笨重了,所以自己写了个可解析和修改json格式的库,

期间也遇到了之前未关注的问题:http传输编码、node流的相关处理。下面是实现代码:

var zlib = require('zlib');
var concatStream = require('concat-stream');
/**
* Modify the response of json
* @param res {Response} The http response
* @param contentEncoding {String} The http header content-encoding: gzip/deflate
* @param callback {Function} Custom modified logic
*/
module.exports = function modifyResponse(res, contentEncoding, callback) {
var unzip, zip;
// Now only deal with the gzip and deflate content-encoding.
if (contentEncoding === 'gzip') {
unzip = zlib.Gunzip();
zip = zlib.Gzip();
} else if (contentEncoding === 'deflate') {
unzip = zlib.Inflate();
zip = zlib.Deflate();
}
// The cache response method can be called after the modification.
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('Not supported content-encoding: ' + contentEncoding);
return;
}
// The rewrite response method is replaced by unzip stream.
res.write = function (data) {
unzip.write(data);
};
res.end = function (data) {
unzip.end(data);
};
// Concat 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 logic
if (typeof callback === 'function') {
body = callback(body);
}
// Converts the JSON to buffer.
body = new Buffer(JSON.stringify(body));
// Call the response method and recover the content-encoding.
zip.on('data', function (chunk) {
_write.call(res, chunk);
});
zip.on('end', function () {
_end.call(res);
});
zip.write(body);
zip.end();
});
unzip.pipe(concatWrite);
};

项目地址:node-http-proxy-json,欢迎大家试用提意见,同时不要吝啬Star。

在该库的实现过程中越发觉得理论知识的重要性,所谓理论是行动的先导,之前都是使用第三方库,也没去关心一些底层的细节处理。

后面有空一定要多看看底层的实现,否则遇到难搞问题就卡住了。

以上所述是小编给大家介绍的node-http-proxy修改响应结果实例代码,希望对大家有所帮助!

Javascript 相关文章推荐
javascript 表格排序和表头浮动效果(扩展SortTable)
Apr 07 Javascript
Jquery实现无刷新DropDownList联动实现代码
Mar 08 Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 Javascript
jQuery中值得注意的trigger方法浅析
Dec 12 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
Vue自定义指令封装节流函数的方法示例
Jul 09 Javascript
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 Javascript
vue中uni-app 实现小程序登录注册功能
Oct 12 Javascript
js实现3D旋转相册
Aug 02 Javascript
jQuery实现移动端扭蛋机抽奖
Nov 08 jQuery
SpringBoot在yml配置文件中配置druid的操作
Nov 16 Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 #Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 #Javascript
jquery插件方式实现table查询功能的简单实例
Jun 06 #Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
Jun 06 #Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
Jun 06 #Javascript
JavaScript 数组中最大最小值
Jun 05 #Javascript
使用three.js 画渐变的直线
Jun 05 #Javascript
You might like
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
剖析Angular Component的源码示例
2018/03/23 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
Django forms组件的使用教程
2018/10/08 Python
python内打印变量之%和f的实例
2020/02/19 Python
爱我中华教学反思
2014/04/28 职场文书
母亲节演讲稿
2014/05/27 职场文书
2014和解协议书范文
2014/09/15 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
任命书格式范文
2015/09/22 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB