跑了一个老项目(其实也不是很老,大约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
谢谢。