配置proxyTable解決開發(fā)環(huán)境的跨域問題(強勢補充,如果你還沒解決,請看這里)

無數(shù)的人學習vue,都要面臨開發(fā)跨域的問題。

雖然百度出有解決辦法,依然有一半多的童鞋依樣畫葫蘆,還是沒搞定。

到底如何理解proxyTable,下面直入正題。

核心:proxyTable配置的代理是把服務器端(另一個域)代理到開發(fā)環(huán)境的域

核心:proxyTable配置的代理是把服務器端(另一個域)代理到開發(fā)環(huán)境的

核心:proxyTable配置的代理是把服務器端(另一個域)代理到開發(fā)環(huán)境的

重要的事情,說3遍。是把另一個域代理回本地。

說以,不要理解成我的所有服務器端接口沒有api目錄。配置里多了個/api路徑,不適合我

如果你配置完成,瀏覽器F12,查看網(wǎng)絡,發(fā)現(xiàn)ajax請求的URL是localhost:8080/api/……你可能會疑惑,我的api接口怎么變成vue開發(fā)的域了了?恭喜你代理已經(jīng)成功了,如果還沒OK,都是一些url的小問題了。

說明:

以下都參照我的環(huán)境來舉例,我前端開發(fā)是localhost:8080,請求的所有api是www.abc.com(我是添加了hosts的,如果你服務端是類似localhost:9527或其它,請自行修改)

1、/config/index.js,別看到路徑多了個api就覺得不適合,你就離開了,其實就是要這樣

proxyTable: {

? '/api': {

? ? target:'http://www.abc.com',?

? ? changeOrigin:true,

? ? pathRewrite: {

? ? ? '^/api':''

? ? }

? }

},

2、ajax請求的url,真實的服務端url是http://www.abc.com/login,前端請改寫成/api/login

this.$http.get('/api/login').then(……)

如果你配置OK,瀏覽器F12,查看ajax請求的網(wǎng)絡,會看到請求信息:

Request URL:? http://localhost:8080/api/login

恭喜你,大功告成了。服務端的http://www.abc.com/login被代理到開發(fā)環(huán)境下/api了,其實就是要這樣。

再次重申,核心:proxyTable配置的代理是把服務器端代理到開發(fā)環(huán)境的node站點

這樣的問題是開發(fā)環(huán)境和正式環(huán)境又如何兼容呢?我的做法是:

把所有異步請求的url都統(tǒng)一放到全局變量的,比如在一個api.js里面

const BaseUrl =? process.env.NODE_ENV=='production'? '':'/api';

//如果是正式環(huán)境,其實不需要域名,本身打包發(fā)布后就放到主域名下的,所以前綴可以為空字符串。

//如果你都想加上域名,可以自行根據(jù)開發(fā)的環(huán)境變量判斷取值,如process.env.NODE_ENV=='production'? process.env.BASE_API:'/api'

//我的這個evn.BASE_API的全局環(huán)境變量是在config/dev.env.js配置的,請自行對照配置

global.API_URL= {

'login':? ? ? ? ? ? ? BaseUrl +'/login',

……

使用的時候

this.$http.get(API_URL.login).then(……

其他補充:

1、如果你封裝了axios,那么開發(fā)模式千萬別再加baseURL參數(shù)了。

如果要加,也記得先判斷環(huán)境 process.env.NODE_ENV=='production'?

2、這個方法不需要api接口的后端配置 Access-Control-Allow-Origin: *

意味著,如果是分離開發(fā),你不用麻煩后端童鞋。

總之這個proxyTable好處多多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容