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重要知识更新
Jul 08 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
基于JQUERY的多级联动代码
Jan 24 Javascript
用jquery统计子菜单的条数示例代码
Oct 18 Javascript
input:checkbox多选框实现单选效果跟radio一样
Jun 16 Javascript
JavaScript数据结构和算法之二叉树详解
Feb 11 Javascript
模仿password输入框的实现代码
Jun 07 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
vue双向绑定简要分析
Mar 23 Javascript
使用apifm-wxapi模块中的问题及解决方法
Aug 05 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
javascript multibox 全选
2009/03/22 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
python中解析json格式文件的方法示例
2017/05/03 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
python实现文件的分割与合并
2019/08/29 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
智能电子应届生求职信
2013/11/10 职场文书
出纳员岗位责任制
2014/02/11 职场文书
酒店员工检讨书
2014/02/18 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
家长会后的感想
2015/08/11 职场文书
找规律教学反思
2016/02/23 职场文书
MySQL Server层四个日志的实现
2022/03/31 MySQL