Node 使用express-http-proxy 做api網(wǎng)關(guān)的實(shí)現(xiàn)
拷貝代碼備忘,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(); } }); // 代碼轉(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 具體按照自己的需求來 // 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nodejs實(shí)現(xiàn)bigpipe異步加載頁面方案
本文給大家分享的是使用nodejs結(jié)合bigpipe實(shí)現(xiàn)異步加載頁面的方案,非常的實(shí)用,也是以后前端性能優(yōu)化的一個(gè)方向,希望大家能夠喜歡。2016-01-01node連接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-09Node.js如何對SQLite的async/await封裝詳解
這篇文章主要給大家介紹了關(guān)于Node.js如何對SQLite的async/await進(jìn)行封裝的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02解決Mac安裝thrift因bison報(bào)錯(cuò)的問題
今天小編就為大家分享一篇解決Mac安裝thrift因bison報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05