最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用proxytable 配置解決 vue-cli 的跨域請(qǐng)求問(wèn)題【推薦】

 更新時(shí)間:2018年05月28日 08:23:00   作者:Tricky''''s Blog  
這篇文章主要介紹了利用 proxytable 配置解決 vue-cli 的跨域請(qǐng)求問(wèn)題,本文的目錄結(jié)構(gòu)基于 webpack 模板結(jié)構(gòu),需要的朋友可以參考下

本文適用人群:

  • 會(huì)使用 vue-cli 搭建一個(gè)基本的 vue webpack 項(xiàng)目,本文的目錄結(jié)構(gòu)基于 webpack 模板結(jié)構(gòu)
  • 懂得 axios 基本用法

問(wèn)題導(dǎo)向

日常開(kāi)發(fā)中,前端經(jīng)常需要通過(guò) ajax 從后端獲取數(shù)據(jù)。而在這種前后端分離的開(kāi)發(fā)模式下,往往前端項(xiàng)目與后端項(xiàng)目的 IP地址、端口號(hào)、協(xié)議 大概率是不一樣的,由于瀏覽器的安全策略設(shè)定,不進(jìn)行相應(yīng)配置的話,前端的請(qǐng)求就會(huì)被瀏覽器攔截掉啦。

假設(shè)某個(gè)頁(yè)面組件在加載的時(shí)候會(huì)向后端發(fā)送一個(gè)請(qǐng)求,然后根據(jù)返回的結(jié)果來(lái)渲染頁(yè)面。代碼示例如下:

前端項(xiàng)目通過(guò) npm run dev 運(yùn)行在 localhost:8081 上,

后端項(xiàng)目通過(guò) apache 運(yùn)行在 localhost/test/public/api/books

<template>
 <div class="hello">
 <ul>
  <li v-for="book of books">{{book.name}}</li>
 </ul>
 </div>
</template>
<script>
 import axios from 'axios';
 export default {
 name: 'HelloWorld',
 data() {
  return {
  books: []
  }
 },
 created(){
  let self = this;
  axios.get("http://localhost/test/public/api/books")
  .then((response)=>{
  self.books = response.data;
  });
 }
 }
</script>

直接訪問(wèn)后端鏈接,將能得到以下返回內(nèi)容:

[
 {"name":"javascript \u4ece\u5165\u95e8\u5230\u653e\u5f03"},
 {"name":"\u9888\u690e\u75c5\u5eb7\u590d\u6307\u5357"},
 {"name":"\u89c6\u529b\u4fdd\u62a4\u6307\u5357"}
]

但是當(dāng)我們?cè)跒g覽器中運(yùn)行前端頁(yè)面,會(huì)報(bào)錯(cuò)!控制臺(tái)打印如下:

 

可見(jiàn),瀏覽器對(duì)于跨域訪問(wèn)進(jìn)行了限制,因?yàn)樵诶又星岸隧?xiàng)目url與后端項(xiàng)目url的端口號(hào)不相同,所以瀏覽器攔截了我們的請(qǐng)求。

解決方案

解決方式有很多種,包括可以很簡(jiǎn)單粗暴地讓后端代碼設(shè)置一個(gè) Access-Control-Allow-Origin 頭來(lái)解決這個(gè)問(wèn)題。但是,在實(shí)際開(kāi)發(fā)中,后端的小哥哥們才不會(huì)理會(huì)你這個(gè)羞恥的小請(qǐng)求呢~

那怎么辦咧~

其實(shí)我們可以通過(guò)配置 vue 項(xiàng)目中的 config/index.js 來(lái)解決問(wèn)題。

將 dev 中的 proxyTable 改為如下:

proxyTable: {
 '/api': {
 target: 'http://localhost/test/public/api/',
 changeOrigin: true,
 pathRewrite: {
  '^/api': ''
 }
 }
},

接著,再將 vue 組件頁(yè)面中的 ajax 請(qǐng)求代碼改為如下:

// 改為這樣,原來(lái)是這樣:axios.get("http://localhost/test/public/api/books")
axios.get("/api/books")

重新運(yùn)行 npm run dev ,運(yùn)行效果如下:

 

當(dāng)當(dāng)當(dāng)!成功!

為什么這么做?

當(dāng)我們打開(kāi)瀏覽器的開(kāi)發(fā)者工具查看一下網(wǎng)絡(luò)請(qǐng)求就會(huì)發(fā)現(xiàn),這個(gè) ajax 請(qǐng)求竟然是向我們前端的 webpack-dev-server 發(fā)送的:

 

而且居然能返回正確的數(shù)據(jù)???

瀏覽器有安全策略限制,但是第三方的服務(wù)(服務(wù)器)沒(méi)有呀,所以我們可以通過(guò)讓瀏覽器訪問(wèn)前端開(kāi)發(fā)服務(wù)器的url,讓前端開(kāi)發(fā)服務(wù)器去向后端服務(wù)器發(fā)送請(qǐng)求,再返回?cái)?shù)據(jù)給瀏覽器,這樣子就不存在跨域問(wèn)題啦。

 

當(dāng)我們?cè)谂渲弥羞@么寫(xiě)時(shí):

proxyTable: {
 '/api': {
 target: 'http://localhost/test/public/api/',
 }
},

對(duì)于8081端口的開(kāi)發(fā)服務(wù)器而言,所有以 /api 開(kāi)頭的 uri 都會(huì)被轉(zhuǎn)發(fā)到 http://localhost/test/public/api/ ,

也就是說(shuō),在瀏覽器中訪問(wèn) localhost:8081/api/books ,前端開(kāi)發(fā)服務(wù)器就會(huì)向 http://localhost/test/public/api/api/books 請(qǐng)求數(shù)據(jù)。就是簡(jiǎn)單粗暴地在 target 之后拼接上當(dāng)前的uri。

會(huì)發(fā)現(xiàn)這樣子做,實(shí)際的 url 中多了一個(gè) /api ,不滿足我們的需求,所以可以通過(guò) pathRewrite 將這幾個(gè)字符串替換掉。

// 將 "/api" 開(kāi)頭的 url 中的 "api" 替換成 空
proxyTable: {
 '/api': {
 target: 'http://localhost/test/public/api/',
 pathRewrite: {
  '^/api': ''
 }
 }
},
// 根據(jù)上面的規(guī)則
// 當(dāng)在瀏覽器訪問(wèn) localhost:8081/api/books
// 則實(shí)際訪問(wèn)的是 http://localhost/test/public/api/books
// 假設(shè)設(shè)置成 
pathRewrite: {'^/api': '/somethingnew'}
// 當(dāng)在瀏覽器訪問(wèn) localhost:8081/api/books
// 則實(shí)際訪問(wèn)的是 http://localhost/test/public/somethingnew/books

而配置項(xiàng) changeOrigin: true 則是設(shè)置了前端開(kāi)發(fā)服務(wù)器向后端發(fā)送請(qǐng)求時(shí) HTTP 包中的 HOST 字段。當(dāng)設(shè)置為 true 時(shí),HOST 會(huì)被設(shè)置成目標(biāo)地址(target)中的主機(jī)。當(dāng)后端服務(wù)器是虛擬主機(jī)時(shí),這個(gè)選項(xiàng)顯得尤為重要,或者說(shuō),同一個(gè)IP綁定了多個(gè)服務(wù)器服務(wù)時(shí)顯得尤為重要。不設(shè)置的話,可能會(huì)導(dǎo)致請(qǐng)求不到數(shù)據(jù)。

更多的 proxyTable 可用參數(shù)可以參考 http-proxy-middleware 的文檔

相關(guān)文章

  • 淺談VUE uni-app 常用API

    淺談VUE uni-app 常用API

    這篇文章主要介紹了uni-app 常用API,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • vue實(shí)現(xiàn)前端列表多條件篩選

    vue實(shí)現(xiàn)前端列表多條件篩選

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)前端列表多條件篩選,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • el-table渲染慢卡頓問(wèn)題最優(yōu)解決方案

    el-table渲染慢卡頓問(wèn)題最優(yōu)解決方案

    本文主要介紹了el-table渲染慢卡頓問(wèn)題最優(yōu)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解Vue2如何監(jiān)聽(tīng)數(shù)組的變化

    詳解Vue2如何監(jiān)聽(tīng)數(shù)組的變化

    這篇文章主要來(lái)和大家詳細(xì)探討一下Vue2中是如何監(jiān)聽(tīng)數(shù)組的變化的,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 初識(shí) Vue.js 中的 *.Vue文件

    初識(shí) Vue.js 中的 *.Vue文件

    vue.js是一套構(gòu)建用戶界面的漸進(jìn)式框架,它采用自底向上增量開(kāi)發(fā)的設(shè)計(jì).這篇文章主要介紹了VueJs 填坑日記之初識(shí) *.Vue文件,需要的朋友可以參考下
    2017-11-11
  • vue跳轉(zhuǎn)方式的常見(jiàn)方式以及區(qū)別分析

    vue跳轉(zhuǎn)方式的常見(jiàn)方式以及區(qū)別分析

    在Vue.js中頁(yè)面跳轉(zhuǎn)是前端開(kāi)發(fā)中常見(jiàn)的需求,Vue提供了多種頁(yè)面跳轉(zhuǎn)方式,這篇文章主要給大家介紹了關(guān)于vue跳轉(zhuǎn)方式的常見(jiàn)方式以及區(qū)別分析的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • vue3項(xiàng)目如何使用prettier格式化代碼

    vue3項(xiàng)目如何使用prettier格式化代碼

    這篇文章主要介紹了vue3項(xiàng)目如何使用prettier格式化代碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue 使用print-js 打印渲染不出來(lái)問(wèn)題

    vue 使用print-js 打印渲染不出來(lái)問(wèn)題

    這篇文章主要介紹了vue 使用print-js 打印渲染不出來(lái)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue中router-view組件的使用詳解

    vue中router-view組件的使用詳解

    這篇文章主要介紹了vue中router-view組件的使用,這個(gè)時(shí)候我們就需要用到路由中的 router-view組件(也叫路由占位符)了,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • JavaScript的MVVM庫(kù)Vue.js入門(mén)學(xué)習(xí)筆記

    JavaScript的MVVM庫(kù)Vue.js入門(mén)學(xué)習(xí)筆記

    這篇文章主要介紹了JavaScript的MVVM庫(kù)Vue.js入門(mén)學(xué)習(xí)筆記,Vue.js是一個(gè)新興的js庫(kù),主要用于實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件,需要的朋友可以參考下
    2016-05-05

最新評(píng)論

肇源县| 修武县| 定陶县| 乐业县| 杭锦后旗| 黄梅县| 兴安县| 辽阳县| 仪征市| 固阳县| 尼勒克县| 罗甸县| 公安县| 大关县| 镇雄县| 淳安县| 育儿| 荔波县| 淄博市| 唐河县| 民权县| 阿克| 沅江市| 长治市| 许昌市| 巴楚县| 南川市| 柏乡县| 庆云县| 左权县| 宁津县| 卢龙县| 涟水县| 宾阳县| 景谷| 金山区| 方城县| 纳雍县| 福海县| 嘉禾县| 平果县|