欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

VueCli生產(chǎn)環(huán)境打包部署跨域失敗的解決

 更新時間:2020年11月13日 10:28:23   作者:不知名碼農(nóng)1994  
這篇文章主要介紹了VueCli生產(chǎn)環(huán)境打包部署跨域失敗的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

常見的跨域配置(/config/index.js):

proxyTable: {
 '/api': {
 target: 'http://192.168.2.139:8080/Mobile/Max', // 接口的域名
 // secure: false, // 如果是https接口,需要配置這個參數(shù)
 changeOrigin: true, // 如果接口跨域,需要進行這個參數(shù)配置,為true的話,請求的header將會設置為匹配目標服務器的規(guī)則(Access-Control-Allow-Origin)
 pathRewrite: {
 '^/api': '' //本身的接口地址沒有 '/api' 這種通用前綴,所以要rewrite,如果本身有則去掉
 }
 }
 },

使用:‘/api/getData'

在開發(fā)調(diào)試時,使用axios進行數(shù)據(jù)交互時沒問題。但打包部署到服務器上發(fā)現(xiàn)404,跨域報錯了。研究發(fā)現(xiàn)還需要進行配置一下。

config文件夾還有2個文件dev.env.js和prod.env.js 分別是開發(fā)環(huán)境和生產(chǎn)環(huán)境配置文件,我們需要分別進行修改。

dev.env.js(開發(fā)環(huán)境)

const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
 
module.exports = merge(prodEnv, {
 NODE_ENV: '"development"',
 VUE_APP_BASE_API:'"/api"'
})
prod.env.js(生產(chǎn)環(huán)境)

module.exports = {
 NODE_ENV: '"production"',
 VUE_APP_BASE_API:'"http://192.168.xx:xxx"' //項目api地址
}

注意屬性值里面要雙引號,否則會報錯(Unterminated string constant)。

配置好之后,程序會自動判斷當前是開發(fā)還是生產(chǎn)環(huán)境,然后匹配VUE_APP_BASE_API。

VUE_APP_BASE_API可以通過process.env.VUE_APP_BASE_API來訪問。

每次使用:process.env.VUE_APP_BASE_API+api地址 會很麻煩,這時我們可以設置axios的baseuURL。

一般我們會自己寫個axios攔截器,生成一個axios對象,進行token等安全驗證。再把這個對象引用到main,js,掛載在vue實例上。這里不做相關贅述,網(wǎng)上有很多。

生成axios對象設置baseURL:process.env.VUE_APP_BASE_API

這是我項目中axios攔截器部分代碼

設置后,記得重新啟動項目。我們調(diào)用數(shù)據(jù)就可以省去process.env.VUE_APP_BASE_API了 ,直接寫接口地址方法名字符串。

比如:this. $axios.get(process.env.VUE_APP_BASE_API+‘/getData' ) 變成 this. $axios.get(‘/getData' )

補充知識:vue-cli項目開發(fā)/生產(chǎn)環(huán)境代理實現(xiàn)跨域請求+webpack配置開發(fā)/生產(chǎn)環(huán)境的接口地址

一、開發(fā)環(huán)境中跨域  

使用 Vue-cli 創(chuàng)建的項目,開發(fā)地址是 localhost:8080,需要訪問非本機上的接口http://10.1.0.34:8000/queryRole。

不同域名之間的訪問,需要跨域才能正確請求。

跨域的方法很多,通常都需要后臺配置,不過 Vue-cli 創(chuàng)建的項目,可以直接利用 Node.js 代理服務器,通過修改vue proxyTable接口實現(xiàn)跨域請求。在vue-cli項目中的config文件夾下的index.js配置文件中,修改前的dev:

dev: { 
 env: require('./dev.env'), 
 port: 8080, 
 autoOpenBrowser: true, 
 assetsSubDirectory: 'static', 
 assetsPublicPath: '/', 
 proxyTable: {}, 
 cssSourceMap: false 
 }

  只要修改里面的proxyTable: {}項

proxyTable: { 
 '/api': { //代理地址 
 target: 'http://10.1.0.34:8000/', //需要代理的地址 
 changeOrigin: true, //是否跨域 
 secure: false, 
 pathRewrite: { 
  '^/api': '/' //本身的接口地址沒有 '/api' 這種通用前綴,所以要rewrite,如果本身有則去掉 
 }
 }
}

  然后重啟項目npm run dev

  請求數(shù)據(jù)時URL前加上“/api”就可以跨域請求了

self.$axios.get('/api/queryRole', {params: params}) 
 .then((res) => { 
 console.log(res); 
 }).catch((err) => { 
 console.log(err); 
 })

1、參數(shù)proxyTable詳解:

   vue-cli的config文件里的參數(shù):proxyTable,這個參數(shù)主要是一個地址映射表,你可以通過設置將復雜的url簡化,例如我們要請求的地址是api.xxxxxxxx.com/list/1,可以按照如下設置:

proxyTable: {
 '/list': {
 target: 'http://api.xxxxxxxx.com',
 pathRewrite: {
 '^/list': '/list'
 }
 }
}

  這樣我們在寫url的時候,只用寫成/list/1就可以代表api.xxxxxxxx.com/list/1.   

那么又是如何解決跨域問題的呢?其實在上面的'list'的參數(shù)里有一個changeOrigin參數(shù),接收一個布爾值,如果設置為true,那么本地會虛擬一個服務端接收你的請求并代你發(fā)送該請求,這樣就不會有跨域問題了,當然這只適用于開發(fā)環(huán)境。

增加的代碼如下所示:

proxyTable: {
 '/list': {
 target: 'http://api.xxxxxxxx.com',
 changeOrigin: true,
 pathRewrite: {
 '^/list': '/list'
 }
 }
}

   vue-cli的這個設置來自于其使用的插件http-proxy-middleware

   github:https://github.com/chimurai/http-proxy-middleware

  深入了解的話可以看該插件配置說明,似乎還支持websocket,很強大的插件。

2、pathRewrite含義

  用代理,首先你得有一個標識,告訴他你這個連接要用代理,不然的話,可能你的 html,css,js這些靜態(tài)資源都跑去代理。所以我們只要接口用代理,靜態(tài)文件用本地。'/iclient': {}, 就是告訴node,我接口只要是'/iclient'開頭的才用代理。

所以你的接口就要這么寫 /iclient/xx/xx。最后代理的路徑就是 http://xxx.xx.com/iclient/xx/xx。

可是不對啊,我正確的接口路徑里面沒有/iclient啊,所以就需要 pathRewrite,用'^/iclient':'', 把'/iclient'去掉,這樣既能有正確標識,又能在請求接口的時候去掉iclient。

當然如果本身的接口中就有/iclient,那么就可以把pathRewrite這個參數(shù)去掉。

二、在生產(chǎn)環(huán)境中跨域  

設置nginx配置文件:

location /api {
 add_header 'Access-Control-Allow-Origin' '*';
 proxy_pass http://fanyi.baidu.com/v2transapi;
}

三、設置不同的接口地址

平常我們團隊開發(fā)時都在公司的局域網(wǎng)內(nèi),調(diào)用接口也是局域網(wǎng)內(nèi)部的,但是項目上線時,請求接口是線上服務器端的,那么就有接口之間的來回切換問題。

在使用vue-cli搭建項目以后,做相關配置就可以實現(xiàn),不用手動更改接口路徑,也可以請求不同環(huán)境下的接口。

1、設置不同的接口地址

先找到以下文件

/config/dev.env.js

/config/prod.env.js

可以看到dev.env.js里面內(nèi)容如下

這是生產(chǎn)環(huán)境的參數(shù)配置,然后我們可以再上面文件加入一行代碼,如下:這就是本地測試環(huán)境請求后臺接口的域名

然后找到prod.env.js文件,如下:

我們加入一行代碼,如下:這是我們上傳服務器以后,請求后臺接口的域名

2、在代碼中調(diào)用設置好的參數(shù):

比如我在本項目中重新封裝axios(api文件在/src/api/index.js中),將配置好的接口地址作為baseURL拼接到接口路徑中,應用參數(shù)部分如下:

最后重新啟動項目就可以了,當npm run dev的時候就運行在生產(chǎn)環(huán)境,當npm run build的時候就是正式的線上環(huán)境。

以上這篇VueCli生產(chǎn)環(huán)境打包部署跨域失敗的解決就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論