跑了一个老项目(其实也不是很老,大约1年多以前的),技术栈是
vue2+element+mock+nginx
。
sorry?nginx?
什么鬼,细看
README
,原来是以
vue-element-admin
为基础开发的微服务开发平台的管理系统,又是微服务,最近一段时间这个词的出现频率较高啊,有点头大,暂时先不管,代码撸起来。
刚开始跑起来,登录,登录名校验,接口挂了,看代码,检查发现,
vue.config.js
文件里的代理
target
属性设置错误,重写到了本地,也就是
localhost
,改一下,ok,搞定,再跑,登录提交挂了,是一个
post
接口,报错状态码
403 Forbidden
,显示
Invalid CORS request
,表面一看,是跨域了,不知所以,照例,百度走起。。
网上搜了一下,大部分人指向一个地方:
onProxyReq
,有文章直接发出来
git
上的一个链接,貌似有解决方案,链接如下
:https://github.com/facebook/create-react-app/issues/5441
主要是需要设置这个东西:
onProxyReq(proxyReq) {
if (proxyReq.getHeader("origin")) {
proxyReq.setHeader("origin", target)
设置的地方就是pathRewrite同级的地方,target就是你需要代理的服务地址,同属性里的target,下面来简单介绍下onProxyReq以及onProxyRes。
dev-server的proxy有两个事件onProxyReq,onProxyRes,可以在请求发送前和响应后对请求内容进行更改。
onProxyReq的第一个参数proxyReq是node http.ClientRequest的实例,后两个参数req和res分别是Express框架封装的Request对象和Response对象。
onProxyRes的第一个参数proxyRes则是 node http.IncomingMessage的实例,内置的方法及属性都有所不同。
看起来,这两个方法是两个事件拦截器,一个请求,一个相应,我试着在onProxyReq里打log输出,但是实际跑起来,即使接口成功调用了,log信息也没有出来,网上也有很多人遇到这个问题,有了解的大神可以说下这其中的原理。
好了,前期铺垫就这么多,我按照git里的那个方法设置了后,然并卵,报错依旧,昨天晚上搞了几个小时,还是没搞定,今天早上来了继续搞。
后又在网上看到一篇文章,也是设置onProxyReq,如下:
onProxyReq(proxyReq){
proxyReq.removeHeader('origin')
文章地址:https://www.cnblogs.com/sweeeper/p/11132455.html
再跑,ok,接口全部调用成功,这里是删除了origin,有大神知道这是怎么回事吗?两种方式有什么区别?
另外,网上还有一篇关于解决403报错的文章,也许对大家有帮助,地址:https://www.cnblogs.com/midworld/p/10996850.html
谢谢。