最近自己和朋友做了一個小的項目,用的是vue3.x版本,本地dev運行的時候接口什么的都是正常的,但是build打包后本地使用anywhere啟動一個本地服務的時候發現接口報錯405狀態,發布到線上接口直接報錯404。
很奇怪,因為本地都是好的沒有道理線上的不行。
我第一時間想到的很大可能是設置代理的部分出了問題。
首先我排查了本地的代碼,本地代碼是ok的,然后和之前2.x版本的代理配置比對,也沒有發現問題所在。
然后在谷歌上面找到了一個原因:
vue的代理配置只是在dev的時候啟動,打包的時候並沒有把這個代理配置進去。
也就是說生產環境是沒有代理的,而我們的項目因為后端的原因設置了兩個端口號(正常來講一個項目的話,給到前端應該是同一個ip同一個端口號,不同的地址后端去做nginx代理),因為兩個端口號,為了避免接口出錯我直接把代理部分設置為了帶有ip地址的接口,在axios里面把baseURL去掉了,這樣就造成dev時候代理啟用,所以接口不報錯,anywhere的時候代理沒有啟用所以就有跨域,而在線上因為端口號不一樣,直接就找不到。
然后我又重新改造了前端的代碼,在封裝了post方法的里面把baseURL設置為傳參而不是默認值,相當於增加了一個參數(實際項目中不建議這樣做)。
至此問題解決。
因為使用了3.x的版本,在打包的時候需要注意打包后引用的js和css的路徑問題。
關於baseUrl:
baseUrl會附加到你綁定的axios實例(如果是全局的,那就是所有實例)上,即如果get/post的url參數是相對路徑(如) /api/c/xx,那就會執行 baseUrl + '/api/c/xx',如果未指定baseUrl,那就走瀏覽器地址欄里的base + baseUrl。