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 相关文章推荐
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
Mar 12 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
jQuery找出网页上最高元素的方法
Mar 20 Javascript
JS+CSS实现六级网站导航主菜单效果
Sep 28 Javascript
jQuery Mobile 和 Kendo UI 的比较
May 05 Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
在vue组件中使用axios的方法
Mar 16 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
Oct 25 Javascript
微信小程序 bindtap 传参的实例代码
Feb 21 Javascript
vue router 动态路由清除方式
May 25 Vue.js
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登录环节防止sql注入的方法浅析
2014/06/30 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
PHP缓冲区用法总结
2016/02/14 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python中获取网页状态码的两个方法
2014/11/03 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
常用python编程模板汇总
2016/02/12 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
在线服装零售商:SheIn
2016/07/22 全球购物
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
师范生见习报告范文
2014/11/03 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
幸福终点站观后感
2015/06/04 职场文书
消夏晚会主持词
2015/06/30 职场文书