Node 使用express-http-proxy 做api網(wǎng)關(guān)的實(shí)現(xiàn)
拷貝代碼備忘,filter過(guò)濾請(qǐng)求,proxyReqOptDecorator重寫請(qǐng)求頭,代碼如下:
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請(qǐng)求快速返回*/
}
else {
next();
}
});
// 代碼轉(zhuǎn)發(fā)
app.use('/ProxySSO', proxy(req => {
return req.headers.apiurl
}, {
filter: function (req, res) {
// 用戶名\系統(tǒng)標(biāo)識(shí)\用戶權(quán)限
let { systemName, masterName, powers } = req.tokenDecode;
const { originalUrl } = req;
const url = originalUrl.replace('/ProxySSO', '').split('?')[0];
/**
* 接口權(quán)限檢查
* @param {String} url 接口地址
* @param {Object} powers rbac權(quán)限列表
* @returns {boolean} 是否有權(quán)限
*/
const checkPowers = (url, powers) => {
// do something
}
const hasPowers = checkPowers(url, powers);
// 權(quán)限判斷
return hasPowers;
},
proxyReqOptDecorator: function(proxyReqOpts, srcReq) {
// header增加masterName 具體按照自己的需求來(lái)
// proxyReqOpts.headers['masterName'] = srcReq.tokenDecode.masterName;
return proxyReqOpts;
}
}));
module.exports = app;
到此這篇關(guān)于Node 使用express-http-proxy 做api網(wǎng)關(guān)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Node api網(wǎng)關(guān)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nodejs實(shí)現(xiàn)bigpipe異步加載頁(yè)面方案
本文給大家分享的是使用nodejs結(jié)合bigpipe實(shí)現(xiàn)異步加載頁(yè)面的方案,非常的實(shí)用,也是以后前端性能優(yōu)化的一個(gè)方向,希望大家能夠喜歡。2016-01-01
node連接kafka2.0實(shí)現(xiàn)方法示例
這篇文章主要介紹了node連接kafka2.0,nodejs連接kafka2.0的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了kafka2.0的功能、原理、以及node.js連接kafka2.0的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2023-05-05
在Linux系統(tǒng)上更新Node.js到最新版本的3種方法小結(jié)
這篇文章主要介紹了在Linux系統(tǒng)上更新Node.js到最新版本的3種方法,使用NVM,使用NPM,用二進(jìn)制包更新Node.js,文中有詳解更新方法,需要的朋友可以參考下2023-09-09
Node.js如何對(duì)SQLite的async/await封裝詳解
這篇文章主要給大家介紹了關(guān)于Node.js如何對(duì)SQLite的async/await進(jìn)行封裝的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
解決Mac安裝thrift因bison報(bào)錯(cuò)的問(wèn)題
今天小編就為大家分享一篇解決Mac安裝thrift因bison報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
node.js中的url.parse方法使用說(shuō)明
這篇文章主要介紹了node.js中的url.parse方法使用說(shuō)明,本文介紹了url.parse的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12

