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 对象(object)的prototype
May 09 Javascript
jQuery知识点整理
Jan 30 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
Aug 12 Javascript
jQuery Ajax请求后台数据并在前台接收
Dec 10 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
JS实现中文汉字按拼音排序的方法
Oct 09 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
vue项目中使用百度地图的方法
Jun 08 Javascript
Vue实现星级评价效果实例详解
Dec 30 Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 Javascript
es6函数之尾递归用法实例分析
Apr 25 Javascript
el-form 多层级表单的实现示例
Sep 10 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生成EAN_13标准条形码实例
2013/11/13 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
python中文件变化监控示例(watchdog)
2017/10/16 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
Python底层封装实现方法详解
2020/01/22 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
python中wheel的用法整理
2020/06/15 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
一封普通求职者的求职信
2013/11/20 职场文书
大一自我鉴定范文
2013/12/27 职场文书
物理专业本科生自荐信
2014/01/30 职场文书
党组织公开承诺书
2014/03/29 职场文书
铅球加油稿100字
2014/09/26 职场文书
奖金申请报告模板
2015/05/15 职场文书
付款证明格式范文
2015/06/19 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
课改心得体会范文
2016/01/25 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript