亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue-cli項目開發/生產環境代理如何實現跨域請求

發布時間:2021-07-20 09:22:50 來源:億速云 閱讀:415 作者:小新 欄目:web開發

這篇文章主要介紹了vue-cli項目開發/生產環境代理如何實現跨域請求,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

開發環境中跨域

使用vue-cli創建的項目,開發地址是localhost:8080,需要訪問非本機上的接口http://192.168.0.112:8080/cms/queryMaterial。不同域名之間的訪問,需要跨域才能正確請求。跨域的方法很多,通常都需要后臺配置,不過vue-cli創建的項目,可以直接利用node.js代理服務器,通過修改vue proxyTable接口實現跨域請求。在vue-cli項目中的config文件夾下的index.js配置文件中,修改前的dev:

dev: {
  assetsSubDirectory: 'static', //靜態資源根目錄的子目錄static,也就是dist目錄下面的static
  assetsPublicPath: '/', //編譯發布的根目錄,可配置為資源服務器域名或 CDN 域名
  proxyTable: {}, //proxyTable 代理的接口(可跨域)
  host: 'localhost', 
  port: 8080, //dev-server的端口號,可以自行更改
  autoOpenBrowser: false, //是否自動打開瀏覽器
  errorOverlay: true,
  notifyOnErrors: true,
  poll: false, 
  useEslint: true,
  showEslintErrorsInOverlay: false,
  devtool: 'cheap-module-eval-source-map',
  cacheBusting: true,
  cssSourceMap: true //默認情況下,關閉 CSS Sourcemaps,因為使用相對路徑會報錯
 },

只要修改里面的proxyTable: {}

proxyTable: {
 '/cms': { //代理地址
  target: 'http://192.168.0.112:8080', //需要代理的地址
  changeOrigin: true, //是否跨域
  secure: false,
  pathRewrite: {
   '^/cms': '/cms' //本身的接口地址沒有'/cms' 這種通用前綴,所以要rewrite,如果本身有則去掉(/cms等價于 www.xxx.com/cms)
  }
 }
},

然后重啟項目npm run dev,請求數據時URL前加上“/cms”就可以跨域請求了

this.$axios.get('/cms/queryMaterial', {params: params}) 
  .then((res) => { 
  console.log(res); 
}).catch((err) => { 
  console.log(err); 
})

訪問接口若沒有安裝axios,則需要進行安裝

1)安裝:npm install axios --save-dev

2)main.js中導入
 import axios from 'axios'; //引入axios進行地址訪問
 Vue.prototype.$axios = axios;(注意:不使用use來使用該例,而是用prototype原型來使用)

1、參數proxyTable詳解:

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

proxyTable: {
 '/list': {
  target: 'http://www.xxx.com',
  pathRewrite: {
   '^/list': '/list'
  }
 }
}

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

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

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

2、pathRewrite含義

用代理,首先你得有一個標識,告訴他你這個連接要用代理,不然的話,可能你的 html,css,js這些靜態資源都跑去代理。所以我們只要接口用代理,靜態文件用本地。'/list': {}, 就是告訴node,我接口只要是'/list'開頭的才用代理。所以你的接口就要這么寫 /list/xx/xx,最后代理的路徑就是 http://xxx.xx.com/list/xx/xx。可是不對啊,我正確的接口路徑里面沒有/list啊,所以就需要 pathRewrite,用'^/list':'', 把'/list'去掉,這樣既能有正確標識,又能在請求接口的時候去掉list。當然如果本身的接口中就有/list,那么就可以把pathRewrite這個參數去掉。

生產環境中跨域

1)設置nginx配置文件:

server {
  ...
  location /cms{
    add_header 'Access-Control-Allow-Origin' '*';
    proxy_pass http://192.168.0.112:8080/cms;
  }
  ...
}

2)java后端配置跨域

if (method.equals("OPTIONS")) {
   response.setHeader("Access-Control-Allow-Headers", "accept, content-type");
   response.setHeader("Access-Control-Allow-Method", "POST");
 }
 response.setHeader("Access-Control-Allow-Origin", "*");

設置不同的接口地址

平常我們團隊開發時都在公司的局域網內,調用接口也是局域網內部的,但是項目上線時,請求接口是線上服務器端的,那么就有接口之間的來回切換問題。
在使用vue-cli搭建項目以后,做相關配置就可以實現,不用手動更改接口路徑,也可以請求不同環境下的接口。

1、設置不同的接口地址

先找到以下文件/config/dev.env.js,/config/prod.env.js,可以看到dev.env.js里面內容如下

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
 NODE_ENV: '"development"'
})

這是開發環境的參數配置,然后我們可以再上面文件加入一行代碼,如下:這就是本地測試環境請求后臺接口的域名

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
 NODE_ENV: '"development"',
 API_ROOT: '"//192.168.0.112:8080"'
})

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

'use strict'
module.exports = {
 NODE_ENV: '"production"'
}

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

'use strict'
module.exports = {
 NODE_ENV: '"production"',
 API_ROOT: '"//www.baidu.com/api"'
}

2、在代碼中調用設置好的參數:

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

vue-cli項目開發/生產環境代理如何實現跨域請求

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“vue-cli項目開發/生產環境代理如何實現跨域請求”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜丰县| 陕西省| 固始县| 泽库县| 夏津县| 东辽县| 库尔勒市| 达日县| 永胜县| 新田县| 潞城市| 会泽县| 温州市| 渝中区| 双城市| 九龙县| 丰原市| 阿拉善左旗| 阜城县| 云霄县| 江津市| 澄江县| 伊吾县| 大兴区| 时尚| 常熟市| 侯马市| 许昌市| 乐业县| 邓州市| 成武县| 安丘市| 中山市| 黄山市| 教育| 张家界市| 武冈市| 泰顺县| 盐边县| 沁水县| 盈江县|