開發環境中跨域
使用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,那么本地會虛擬一個服務端接收你的請求并代你發送該請求,這樣就不會有跨域問題了,當然這只適用于開發環境。增加的代碼如下所示:
新聞熱點
疑難解答
圖片精選