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 相关文章推荐
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
JS动态改变表格边框宽度的方法
Mar 31 Javascript
jQuery使用getJSON方法获取json数据完整示例
Sep 13 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
canvas实现图像布局填充功能
Feb 06 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
Mar 09 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
May 07 Javascript
javascript观察者模式实现自动刷新效果
Sep 05 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
Jan 19 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
Sep 30 Javascript
微信小程序加载机制及运行机制图解
Nov 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
77A一级收信机修理记
2021/03/02 无线电
php生成微信红包数组的方法
2019/09/05 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
JS重载实现方法分析
2016/12/16 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
JS函数基本定义与用法示例
2020/01/15 Javascript
js实现3D旋转相册
2020/08/02 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
Python错误的处理方法
2020/06/23 Python
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
金智子午JAVA面试题
2015/09/04 面试题
高中军训感言600字
2014/03/11 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
我的1919观后感
2015/06/03 职场文书
工作后的感想
2015/08/07 职场文书
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫