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 获取字符串字节数的多种方法
Jun 02 Javascript
WordPress JQuery处理沙发头像
Jun 22 Javascript
初窥JQuery-Jquery简介 入门了解篇
Nov 25 Javascript
js中eval详解
Mar 30 Javascript
JS中产生标识符方式的演变
Jun 12 Javascript
浅谈Sublime Text 3运行JavaScript控制台
Jun 06 Javascript
JS根据生日月份和日期计算星座的简单实现方法
Nov 24 Javascript
JavaScript实现换肤功能
Sep 15 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 Javascript
Node.js开发之套接字(socket)编程入门示例
Nov 05 Javascript
JS 基本概念详细介绍
Oct 16 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之面向对象
2013/05/15 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
再论Javascript下字符串连接的性能
2011/03/05 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
利用Python实现图书超期提醒
2016/08/02 Python
python妙用之编码的转换详解
2017/04/21 Python
Python多线程实现同步的四种方式
2017/05/02 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
工商企业管理实习自我鉴定
2013/12/04 职场文书
商场租赁意向书
2014/07/30 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技