以上是我根據項目需求已經實現了的功能,後續還能夠擴展一些其餘功能: 灰色發佈等。webpack
開發環境時防止跨域會在webpack中添加proxyTable配置,這個配置只在開發環境生效。等到了生產環境會單獨啓一個Express服務提供web靜態資源和proxyTable。git
也就是說,每一個應用都會有一個Express服務,當應用多了之後不利於管理,部署麻煩。github
至於爲何不用Nginx,別問我,咱也不知道- . -web
由於生產環境都是經理來部署的,而後他就嫌這個太麻煩,因而就提出要作一個網關。c#
egg服務的中間件跨域
egg-cors插件內置中間件,該中間件用於支持處理跨域請求一個請求解析的過程服務器
egg-static插件內置中間件,該中間件用於對外提供靜態資源cookie
egg-multi-application-static針對多應用映射不一樣的靜態資源路徑。使用koa-static插件實現,並將封裝爲插件app
遍歷配置項cors
取出來源域名與配置項的prefix對比
知足:則取出配置項的dir生成一個提供靜態資源服務的中間件並返回。
不知足:返回next()
利用compose工具函數造成洋蔥圈式的調用並返回
會解析請求體中的參數並添加到request對象中,當通過該插件解析後的請求再作proxy時可能會丟失post參數
,因此這裏要過濾
一下:
若是訪問路徑是網關本身路由的話則解析,不然跳過
須要注意該中間件的順序,當post請求被該中間件處理後,再作proxy可能會丟失參數
egg-security預防與處理XSS(跨站腳本攻擊)。
驗證token及刷新token。
/gateway/login
或/
時直接跳回refererS
地址或者提示已登陸,refererS不存在
Application not register!
/gateway/login
時則設置cookie.refererSRequest path not authorized!
針對config.proxy
中配置的域名及路徑進行反向代理。
先判斷請求來源的域名是否在config.proxy中,若條件知足則取出該域名下的配置,配合http-proxy-middleware、koa-connect插件進行代理與響應。
大佬請輕噴, 直接從筆記裏copy的,可能就我本身能看懂 - -。