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验证香港身份证的格式或真实性
Feb 07 Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 Javascript
JS非空验证及邮箱验证的实例
Aug 11 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
vue+swiper实现侧滑菜单效果
Dec 28 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
ionic grid(栅格)九宫格制作详解
Jun 30 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 Javascript
全面解析js中的原型,原型对象,原型链
Jan 25 Javascript
vue3中provide && inject的使用
Jul 01 Vue.js
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 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
Laravel 5框架学习之表单
2015/04/08 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
python字符串对其居中显示的方法
2015/07/11 Python
python先序遍历二叉树问题
2017/11/10 Python
Python人脸识别初探
2017/12/21 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
python批量处理文件或文件夹
2020/07/28 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
银行求职信个人范文
2013/12/16 职场文书
党风廉设责任书
2014/04/16 职场文书
政府信息公开实施方案
2014/05/09 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
担保书范文
2015/01/20 职场文书
贫困证明书范文
2015/06/16 职场文书
vue实现Toast组件轻提示
2022/04/10 Vue.js