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 与NVelocity 产生冲突的解决方法
Jun 13 Javascript
jquery.tmpl JQuery模板插件
Oct 10 Javascript
js判断60秒以及倒计时示例代码
Jan 24 Javascript
JavaScript中switch语句的用法详解
Jun 03 Javascript
bootstrap输入框组代码分享
Jun 07 Javascript
BootStrapTable 单选及取值的实现方法
Jan 10 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 Javascript
vue路由嵌套的SPA实现步骤
Nov 06 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
Dec 11 Javascript
Node.js Windows Binary二进制文件安装方法
May 16 Javascript
js实现简易拖拽的示例
Oct 26 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
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
python接口自动化框架实战
2020/12/23 Python
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
上海中网科技笔试题
2012/02/19 面试题
领导干部考察材料
2014/02/08 职场文书
教师个人鉴定材料
2014/02/08 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
暑期社会实践证明书
2014/11/17 职场文书
关于颐和园的导游词
2015/01/30 职场文书
公司放假通知怎么写
2015/04/15 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
手残删除python之后的补救方法
2021/06/26 Python
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
Java对文件的读写操作方法
2022/04/29 Java/Android