1. 程式人生 > 程式設計 >Node 使用express-http-proxy 做api閘道器的實現

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閘道器內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!