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 相关文章推荐
php gethostbyname获取域名ip地址函数详解
Jan 24 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
May 17 Javascript
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
jquery超简单实现手风琴效果的方法
Jun 05 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
jquery实现网站列表切换效果的2种方法
Aug 12 Javascript
vue.js指令v-model实现方法
Dec 05 Javascript
微信浏览器禁止页面下拉查看网址实例详解
Jun 28 Javascript
微信小程序显示下拉列表功能【附源码下载】
Dec 12 Javascript
vue点击当前路由高亮小案例
Sep 26 Javascript
JS数据类型判断的几种常用方法
Jul 07 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
js中的 || 与 && 运算符详解
2018/05/24 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python利用装饰器进行运算的实例分析
2015/08/04 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
金融专业推荐信
2013/11/14 职场文书
中专生自我鉴定书范文
2013/12/28 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript