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 13 Javascript
jquery 中的each()跳出循环的语句
May 23 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
js图片翻书效果代码分享
Aug 20 Javascript
用JS写的一个Ajax库(实例代码)
Aug 06 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
Jan 04 Javascript
AngularJS实现动态添加Option的方法
May 17 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 Javascript
详解JavaScript中分解数字的三种方法
Jan 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中Collection 类的设计
2013/06/21 PHP
php 邮件发送问题解决
2014/03/22 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
淘宝搜索框效果实现分析
2011/03/05 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
python动态参数用法实例分析
2015/05/25 Python
安装Python的教程-Windows
2017/07/22 Python
python如何让类支持比较运算
2018/03/20 Python
pandas的排序和排名的具体使用
2019/07/31 Python
python logging 日志的级别调整方式
2020/02/21 Python
linux 下selenium chrome使用详解
2020/04/02 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
五种Python转义表示法
2020/11/27 Python
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
活动总结报告范文
2014/05/04 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
党员剖析材料范文
2014/12/18 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers