Node 使用express-http-proxy 做api網(wǎng)關(guān)的實(shí)現(xiàn)
拷貝代碼備忘,filter過(guò)濾請(qǐng)求,proxyReqOptDecorator重寫(xiě)請(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) {
// 用戶(hù)名\系統(tǒng)標(biāo)識(shí)\用戶(hù)權(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)文章
詳解node如何讓一個(gè)端口同時(shí)支持https與http
眾所周知node是一個(gè)高性能的web服務(wù)器,使用它可以很簡(jiǎn)單的創(chuàng)建一個(gè)http或https的服務(wù)器。這篇文章主要介紹了詳解node如何讓一個(gè)端口同時(shí)支持https與http2017-07-07
Node.js處理I/O數(shù)據(jù)之使用Buffer模塊緩沖數(shù)據(jù)
這篇文章介紹了Node.js使用Buffer模塊緩沖數(shù)據(jù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
node使用promise替代回調(diào)函數(shù)
這篇文章主要介紹了node使用promise替代回調(diào)函數(shù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
NodeJS實(shí)現(xiàn)阿里大魚(yú)短信通知發(fā)送
本文給大家介紹的是nodejs實(shí)現(xiàn)使用阿里大魚(yú)短信API發(fā)送消息的方法和代碼,有需要的小伙伴可以參考下。2016-01-01
利用Node.js手寫(xiě)一個(gè)簡(jiǎn)單的koa
這篇文章主要為大家詳細(xì)介紹了如何手動(dòng)寫(xiě)一個(gè)簡(jiǎn)單的koa,通過(guò)這個(gè)流程就可以較好的掌握koa2中的基本概念,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
Nodejs中使用captchapng模塊生成圖片驗(yàn)證碼
本篇文章主要介紹了Nodejs中使用captchapng模塊實(shí)現(xiàn)圖片驗(yàn)證碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
NodeJS使用Range請(qǐng)求實(shí)現(xiàn)下載功能的方法示例
本篇使用 NodeJS 的 HTTP 服務(wù)創(chuàng)建客戶(hù)端,使用 Range 請(qǐng)求實(shí)現(xiàn)下載功能,本篇使用 NodeJS 的 HTTP 服務(wù)創(chuàng)建客戶(hù)端,使用 Range 請(qǐng)求實(shí)現(xiàn)下載功能2018-10-10
Restify中接入Socket.io報(bào)Error:Can’t set headers的錯(cuò)誤解決
這篇文章主要給大家介紹了在Restify中接入Socket.io報(bào)Error:Can’t set headers的錯(cuò)誤解決方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03

