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 相关文章推荐
jquery 1.4.2发布!主要是性能与API
Feb 25 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 Javascript
jQueryUI DatePicker 添加时分秒
Jun 04 Javascript
详解VUE 定义全局变量的几种实现方式
Jun 01 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
Aug 22 Javascript
Vuejs 页面的区域化与组件封装的实现
Sep 11 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
Oct 16 Javascript
bootstrap Table服务端处理分页(后台是.net)
Oct 19 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
Jul 18 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
帅气的琦玉老师
2020/03/02 日漫
drupal 代码实现URL重写
2011/05/04 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
PHP经典面试题集锦
2015/03/19 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
javascript折半查找详解
2015/01/26 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
Python实现识别手写数字大纲
2018/01/29 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python矩阵的转置和逆转实例
2018/12/12 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
医药公司采购员岗位职责
2014/09/12 职场文书
学校开学标语
2014/10/06 职场文书
病房管理制度范本
2015/08/06 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
Nginx的基本概念和原理
2022/03/21 Servers
Win11开始菜单添加休眠选项
2022/04/19 数码科技
基于redis+lua进行限流的方法
2022/07/23 Redis