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 异步调用框架 (Part 6 - 实例 & 模式)
Aug 04 Javascript
基于jquery中children()与find()的区别介绍
Apr 26 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
Feb 16 Javascript
理解javascript函数式编程中的闭包(closure)
Mar 08 Javascript
jQuery树形控件zTree使用小结
Aug 02 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
May 03 Javascript
十个免费的web前端开发工具详细整理
Sep 18 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
Nov 03 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
Oct 30 Javascript
Vue中用props给data赋初始值遇到的问题解决
Nov 27 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
Nov 05 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中常见的mongodb查询操作
2013/06/20 PHP
php实现paypal 授权登录
2015/05/28 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
Python实现抓取网页并且解析的实例
2014/09/20 Python
Django中间件实现拦截器的方法
2018/06/01 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
使用Tkinter制作信息提示框
2020/02/18 Python
python 追踪except信息方式
2020/04/25 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
自考生毕业自我鉴定
2013/10/10 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
医学生求职自荐书
2014/06/12 职场文书
校本教研活动总结
2014/07/01 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
冰雪公主观后感
2015/06/16 职场文书
小学庆六一主持词
2015/06/30 职场文书
找规律教学反思
2016/02/23 职场文书
《分数乘法》教学反思
2016/02/24 职场文书