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 相关文章推荐
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
JavaScript定时器制作弹窗小广告
Feb 05 Javascript
vue.js高德地图实现热点图代码实例
Apr 18 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
Jun 11 Javascript
webpack4 optimization使用总结
Nov 10 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
详解vite2.0配置学习(typescript版本)
Feb 25 Javascript
ztree+ajax实现文件树下载功能
May 18 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 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中动态显示签名和ip原理
2007/03/28 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
PHP框架性能测试报告
2016/05/08 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
python enumerate函数的使用方法总结
2017/11/15 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
python爬虫请求头设置代码
2020/07/28 Python
Python中的面向接口编程示例详解
2021/01/17 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
标准导师推荐信(医学类)
2013/10/28 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
白酒代理协议书范本
2014/10/26 职场文书
文明班级申报材料
2014/12/24 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
python基于turtle绘制几何图形
2021/06/15 Python