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 相关文章推荐
一次失败的jQuery优化尝试小结
Feb 06 Javascript
Jquery实现简单的动画效果代码
Mar 18 Javascript
jQuery使用height()获取高度需要注意的地方
Dec 13 Javascript
Jquery动态替换div内容及动态展示的方法
Jan 23 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
JavaScript html5 canvas绘制时钟效果
Mar 01 Javascript
详解Vue路由开启keep-alive时的注意点
Jun 20 Javascript
node.js实现微信JS-API封装接口的示例代码
Sep 06 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
Mar 14 Javascript
详解vue-cli 本地开发mock数据使用方法
May 29 Javascript
vue.js实现的经典计算器/科学计算器功能示例
Jul 11 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 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使用SOAP调用.net的WebService数据
2013/11/12 PHP
yii上传文件或图片实例
2014/04/01 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
python中日志logging模块的性能及多进程详解
2017/07/18 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python async with和async for的使用
2019/06/20 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
营销总经理的岗位职责
2013/12/15 职场文书
公司离职证明范本
2014/01/13 职场文书
九年级家长会邀请函
2014/01/15 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
安全承诺书范文
2014/03/26 职场文书
初中学生期末评语
2014/04/24 职场文书
创优争先心得体会
2014/09/11 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
学前班学生评语
2014/12/29 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers