Node 使用express-http-proxy 做api网关的实现

 更新时间:2020年10月15日 09:37:40   作者:愚坤  
这篇文章主要介绍了Node 使用express-http-proxy 做api网关的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

拷贝代码备忘,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网关内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 搭建一个nodejs脚手架的方法步骤

    搭建一个nodejs脚手架的方法步骤

    这篇文章主要介绍了如何搭建一个nodejs脚手架的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 使用nvm切换node版本的实现方法

    使用nvm切换node版本的实现方法

    我们在工作中可能会碰到这样的情况:一个人要负责多个项目的维护,而项目中的插件又各有不同,插件下载所需的node版本可能也不同,所以只有一个node版本是无法满足工作需求的,所以就有了nvm,volta等node版本管理工具,在本节将介绍nvm的使用方法
    2023-10-10
  • nodejs实现bigpipe异步加载页面方案

    nodejs实现bigpipe异步加载页面方案

    本文给大家分享的是使用nodejs结合bigpipe实现异步加载页面的方案,非常的实用,也是以后前端性能优化的一个方向,希望大家能够喜欢。
    2016-01-01
  • node连接kafka2.0实现方法示例

    node连接kafka2.0实现方法示例

    这篇文章主要介绍了node连接kafka2.0,nodejs连接kafka2.0的实现方法,结合实例形式分析了kafka2.0的功能、原理、以及node.js连接kafka2.0的具体实现技巧,需要的朋友可以参考下
    2023-05-05
  • 在Linux系统上更新Node.js到最新版本的3种方法小结

    在Linux系统上更新Node.js到最新版本的3种方法小结

    这篇文章主要介绍了在Linux系统上更新Node.js到最新版本的3种方法,使用NVM,使用NPM,用二进制包更新Node.js,文中有详解更新方法,需要的朋友可以参考下
    2023-09-09
  • Node.js如何对SQLite的async/await封装详解

    Node.js如何对SQLite的async/await封装详解

    这篇文章主要给大家介绍了关于Node.js如何对SQLite的async/await进行封装的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • node读写Excel操作实例分析

    node读写Excel操作实例分析

    这篇文章主要介绍了node读写Excel操作,结合实例形式分析了node.js使用node-xlsx模块模块读写Excel的相关实现技巧与操作注意事项,需要的朋友可以参考下
    2019-11-11
  • 解决Mac安装thrift因bison报错的问题

    解决Mac安装thrift因bison报错的问题

    今天小编就为大家分享一篇解决Mac安装thrift因bison报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • nodejs中密码加密处理操作详解

    nodejs中密码加密处理操作详解

    这篇文章主要介绍了nodejs中密码加密处理操作,结合实例形式分析了nodejs针对用户登陆密码的加密处理操作相关实现技巧与注意事项,需要的朋友可以参考下
    2018-03-03
  • node.js中的url.parse方法使用说明

    node.js中的url.parse方法使用说明

    这篇文章主要介绍了node.js中的url.parse方法使用说明,本文介绍了url.parse的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12

最新评论