您好,登錄后才能下訂單哦!
這篇文章主要介紹了vue proxyTable的跨域中pathRewrite怎么配置的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue proxyTable的跨域中pathRewrite怎么配置文章都會有所收獲,下面我們一起來看看吧。
當瀏覽器報如下錯誤時,則說明請求跨域了。
localhost/:1 Failed to load http://www.thenewstep.cn/test/testToken.php: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8080’ is therefore not allowed access. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
因為瀏覽器同源策略的限制,不是同源的腳本不能操作其他源下面的對象。
同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。
可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。
簡單的來說:協議、IP、端口三者都相同,則為同源
跨域的解決辦法有很多,比如script標簽 、jsonp、后端設置cros等等…,但是我這里講的是webpack配置vue 的 proxyTable解決跨域。
簡單來說,pathRewrite是使用proxy進行代理時,對請求路徑進行重定向以匹配到正確的請求地址,
dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { '/api': { target: 'http://XX.XX.XX.XX:8083', changeOrigin: true, pathRewrite: { '^/api': '/api' // 這種接口配置出來 http://XX.XX.XX.XX:8083/api/login //'^/api': '/' 這種接口配置出來 http://XX.XX.XX.XX:8083/login } } } },
如何不配置pathRewrite 請求就被轉發到 http://XX.XX.XX.XX:8083 并把相應uri帶上。
比如:localhost:8080/api/xxx 會被轉發到http://XX.XX.XX.XX:8083/api/xxx
配置完成后需要重新編譯一遍 , 調用接口的時候
// 獲取菜單權限 getPermission(){ this.$ajaxget({ url: '/api/getPermission', data: {}, isLayer: true, successFc: data => { console.log(data.data) } })
2種數據請求方式: fecth和axios
1、fetch方式
在需要請求的頁面,只需要這樣寫(/apis+具體請求參數),如下:
fetch("/apis/test/testToken.php", { method: "POST", headers: { "Content-type": "application/json", token: "f4c902c9ae5a2a9d8f84868ad064e706" }, body: JSON.stringify(data) }) .then(res => res.json()) .then(data => { console.log(data); });
2、axios方式
main.js代碼
import Vue from 'vue' import App from './App' import axios from 'axios' Vue.config.productionTip = false Vue.prototype.$axios = axios //將axios掛載在Vue實例原型上 // 設置axios請求的token axios.defaults.headers.common['token'] = 'f4c902c9ae5a2a9d8f84868ad064e706' //設置請求頭 axios.defaults.headers.post["Content-type"] = "application/json"
axios請求頁面代碼
this.$axios.post('/apis/test/testToken.php',data).then(res=>{ console.log(res) })
從網上直接找到的代碼復制過來報錯,最后找了一下午為什么失效,最后發現問題直接破防了
錯誤:
pathRewrite: { " ^/api " : "" //若請求的路徑在目標url下但不在/api 下,則將其轉換成空 },
正確:
pathRewrite: { "^/api": "" //若請求的路徑在目標url下但不在/api 下,則將其轉換成空 },
原因:
直接復制過來的 " ^/api " : ""里面多了兩個空格,判斷url的時候就獲取不到/api,刪除空格就解決問題了
關于“vue proxyTable的跨域中pathRewrite怎么配置”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“vue proxyTable的跨域中pathRewrite怎么配置”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。