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 相关文章推荐
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
Dec 17 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
JS显示表格内指定行html代码的方法
Mar 31 Javascript
JS实现样式清新的横排下拉菜单效果
Oct 09 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
Dec 25 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
javascript使用 concat 方法对数组进行合并的方法
Sep 08 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
Dec 08 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
Vue 动态组件与 v-once 指令的实现
Feb 12 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
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
PHP云打印类完整示例
2016/10/15 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
5 cool javascript apps
2007/03/24 Javascript
js 表单验证方法(实用)
2009/04/28 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
Django之form组件自动校验数据实现
2020/01/14 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
python3实现飞机大战
2020/11/29 Python
python 模拟登陆github的示例
2020/12/04 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
服装设计行业个人的自我评价
2013/12/20 职场文书
党章学习思想汇报
2014/01/14 职场文书
产品促销活动策划书
2014/01/15 职场文书
干部现实表现材料
2014/02/13 职场文书
森林防火工作方案
2014/02/14 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
付款委托书范本
2014/10/05 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL