Node 使用express-http-proxy 做api网关的实现


Posted in Javascript onOctober 15, 2020

拷贝代码备忘,filter过滤请求,proxyReqOptDecorator重写请求头,代码如下:

var express = require('express');
var proxy = require('express-http-proxy')

var app = express();

app.all('*', function (req, res, next) {
 res.header("Access-Control-Allow-Origin", req.headers.origin);
 res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
 res.header("Access-Control-Allow-Credentials", "true");
 res.header("Content-Type", "application/json;charset=utf-8");
 if (req.method == 'OPTIONS') {
  res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
  res.send(200); /*让options请求快速返回*/
 }
 else {
  next();
 }
});

// 代码转发
app.use('/ProxySSO', proxy(req => {
 return req.headers.apiurl
}, {
 filter: function (req, res) {

  // 用户名\系统标识\用户权限
  let { systemName, masterName, powers } = req.tokenDecode;
  const { originalUrl } = req;
  const url = originalUrl.replace('/ProxySSO', '').split('?')[0];

  /**
   * 接口权限检查
   * @param {String} url 接口地址
   * @param {Object} powers rbac权限列表
   * @returns {boolean} 是否有权限
   */
  const checkPowers = (url, powers) => {
    //  do something
  }
  const hasPowers = checkPowers(url, powers);
   // 权限判断
  return hasPowers;
 },
 proxyReqOptDecorator: function(proxyReqOpts, srcReq) {
  // header增加masterName 具体按照自己的需求来
  // proxyReqOpts.headers['masterName'] = srcReq.tokenDecode.masterName;
  return proxyReqOpts;
 }
}));

module.exports = app;

到此这篇关于Node 使用express-http-proxy 做api网关的实现的文章就介绍到这了,更多相关Node api网关内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
JavaScript中的函数重载深入理解
Aug 04 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
Dec 10 Javascript
Javascript编写俄罗斯方块思路及实例
Jul 07 Javascript
JavaScript学习笔记之DOM基础 2.4
Aug 14 Javascript
jQuery中队列queue()函数的实例教程
May 03 Javascript
JavaScript跨域调用基于JSON的RESTful API
Jul 09 Javascript
js中遍历Map对象的简单实例
Aug 08 Javascript
Vue.js中数组变动的检测详解
Oct 12 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
Jan 19 Javascript
详解angularjs利用ui-route异步加载组件
May 21 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
Oct 15 #Javascript
angular共享依赖的解决方案分享
Oct 15 #Javascript
ES11新增的这9个新特性,你都掌握了吗
Oct 15 #Javascript
js实现点击烟花特效
Oct 14 #Javascript
vue使用Sass时报错问题的解决方法
Oct 14 #Javascript
JavaScript原生数组函数实例汇总
Oct 14 #Javascript
如何通过JS实现日历简单算法
Oct 14 #Javascript
You might like
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
python实现五子棋小程序
2019/06/18 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
汽车队司机先进事迹材料
2014/02/01 职场文书
计算机专业职业规划
2014/02/28 职场文书
党课培训主持词
2014/04/01 职场文书
倡议书格式
2014/04/14 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
超越自我演讲稿
2014/05/21 职场文书
身边的榜样活动方案
2014/08/20 职场文书
信息合作协议书
2014/10/09 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python