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 相关文章推荐
延时重复执行函数 lLoopRun.js
May 08 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
Oct 19 Javascript
JS倒计时代码汇总
Nov 25 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
Mar 13 Javascript
基于jQuery实现放大镜特效
Oct 19 Javascript
Jqprint实现页面打印
Jan 06 Javascript
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
vue axios请求频繁时取消上一次请求的方法
Nov 10 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
Typescript的三种运行方式(小结)
Sep 18 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
Feb 26 Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 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自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
python如何统计代码运行的时长
2019/07/24 Python
基于python实现把图片转换成素描
2019/11/13 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
浅谈django channels 路由误导
2020/05/28 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
大专毕业自我鉴定
2014/02/04 职场文书
养牛场项目建议书
2014/05/13 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
大足石刻导游词
2015/02/02 职场文书
中国合伙人观后感
2015/06/02 职场文书
法制教育主题班会
2015/08/13 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js