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去除空格的几种方法
Oct 03 Javascript
JavaScript 不只是脚本
May 30 Javascript
firefox下frameset取不到值的解决方法
Sep 06 Javascript
JS基础之undefined与null的区别分析
Aug 08 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
Sep 27 Javascript
jQuery在iframe中无法弹出对话框的解决方法
Jan 12 Javascript
jquery滚动特效集锦
Jun 03 Javascript
利用Node.js制作爬取大众点评的爬虫
Sep 22 Javascript
jQuery实现可兼容IE6的滚动监听功能
Sep 20 jQuery
js数据类型转换与流程控制操作实例分析
Dec 18 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 Javascript
js实现鼠标拖曳效果
Dec 30 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处理抢购类功能的高并发请求
2018/02/08 PHP
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python文件夹与文件的操作实现代码
2014/07/13 Python
python放大图片和画方格实现算法
2018/03/30 Python
Python实现多进程的四种方式
2019/02/22 Python
Python中的asyncio代码详解
2019/06/10 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
Python如何实现邮件功能
2020/05/27 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
自我鉴定200字
2013/10/28 职场文书
自我评价范文分享
2014/01/04 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
技术总监管理职责范本
2014/03/06 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
农业项目投资意向书
2015/05/09 职场文书
辩论会主持词
2015/07/03 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技