以上是我根据项目需求已经实现了的功能,后续还能够扩展一些其余功能: 灰色发布等。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的,可能就我本身能看懂 - -。