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

解決VueCil代理本地proxytable無效報(bào)錯(cuò)404的問題

 更新時(shí)間:2020年11月07日 10:38:02   作者:jcat_李小黑  
這篇文章主要介紹了解決VueCil代理本地proxytable無效報(bào)錯(cuò)404的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

前言

因?yàn)轫?xiàng)目中遇到了這個(gè)bug:Vue cil2中配置代理proxytable成功,卻無效報(bào)錯(cuò)404,在后端和代理都配置無誤的情況下,還是報(bào)404,先已解決,特記錄,希望能幫助到他人;

正文

1. 為什么要使用代理?

代理的作用是:把請(qǐng)求代理轉(zhuǎn)發(fā)到其他服務(wù)器的中間件;

例如:我們當(dāng)前主機(jī)為http://localhost:8080/,現(xiàn)在我們有一個(gè)需求,如果我們請(qǐng)求/api,我們不希望由3000來處理這個(gè)請(qǐng)求,而希望由另一臺(tái)服務(wù)器https://www.example.org/api來處理這個(gè)請(qǐng)求怎么辦?

這時(shí)候就要使用代理來解決!

2. 在vue中如何使用多個(gè)代理?

module.exports = {
dev: {
 proxyTable: {
  // 第一個(gè)代理
  '/api-test': { 
  target: 'https://www.example.org:', /// 目標(biāo)服務(wù)器 host
  ws:true, //是否啟用websocket
  secure: true, // 如果是https接口,需要配置這個(gè)參數(shù)
  changeOrigin: true, // // 默認(rèn)false,是否需要改變?cè)贾鳈C(jī)頭為目標(biāo)URL,是否跨域
  pathRewrite: {
   '^/api-test/old': '/api-test/new' // 重寫請(qǐng)求,比如我們?cè)丛L問的是api-test/old,那么請(qǐng)求會(huì)被解析為/api-test/new
  },
  //第二個(gè)代理
  '/api-else': { 
  target: 'https://197.32.22.33:8090', 
  ws:true, //是否啟用websocket
  secure: true, 
  changeOrigin: true, 
  pathRewrite: {
   '^/api-else': '' //默認(rèn)寫法,如果不寫pathRewrite就是默認(rèn)為空;
  },
  //第三個(gè)代理
  '/api-three': { 
  target: 'https://197.32.22.33:9090', 
  changeOrigin: true, 
  pathRewrite: {
   '^/api-three': '/api-three' //重寫請(qǐng)求,這樣本地請(qǐng)求不會(huì)有兩次/api-three
  },
  }
 },

上述代碼即可在vue-cil項(xiàng)目中配置代理;

代理的參數(shù)有很多,詳細(xì)可以查看:http-proxy-middleware中的Options,自行添加;

那下面我們來解析一下為什么會(huì):Vue代理本地proxytable成功,卻無效報(bào)錯(cuò)404的幾種情況

3. bug 原因分析

1.在瀏覽器或postman中測(cè)試接口是否正常訪問;(最重要?。〔蝗桓陌胩於紱]用)

那怎么才是成功的訪問呢?

例如:拿第二個(gè)代理舉例:你要訪問的接口為https://197.32.22.33:8090/api-else/getsomething.json,在瀏覽器直接輸入有返回值并測(cè)試無誤后再進(jìn)行下一步;

2.要確保書寫方式完全正確!

2.1(參考寫法2) 這時(shí)候你本地去請(qǐng)求的接口地址會(huì)變成:http://localhost:8080/api-else/api-else/getsomething.json才是正常的!

是不是會(huì)好奇為什么會(huì)有兩個(gè)/api-else,因?yàn)樵诒镜兀篽ttp://localhost:8080/api-else相當(dāng)于:https://197.32.22.33:8090,這才是正常的!

2.2 (參考寫法3)

在按上述寫法還是有誤的情況下,可以參考寫法3的路由去更改測(cè)試。例:你要訪問的接口為https://197.32.22.33:9090/api-three/getThreething.json,本地配置后:http://localhost:8080/api-three/getThreething.json。

多說一句,為什么要提第三種寫法?

這種適用于前后端分離多后臺(tái)項(xiàng)目,后臺(tái)項(xiàng)目的包名為:api-three,使用第2中寫法,在打包之后部署生產(chǎn)環(huán)境會(huì)出現(xiàn)請(qǐng)求的問題(我們自己項(xiàng)目踩過的坑,偶發(fā)),所以之后規(guī)定代理和后臺(tái)包名統(tǒng)一,并且不能直接寫在請(qǐng)求中,而是在配置代理后,重寫代理的請(qǐng)求,指向包名;

3.請(qǐng)修改完config的index.js后,答應(yīng)我一定重啟下項(xiàng)目npm run dev;

4.也是我這次bug的原因(正經(jīng)臉,這個(gè)超級(jí)細(xì)微?。?/p>

在配置多個(gè)代理的情況下,代理名稱不能相同,也不能出現(xiàn)重疊的情況!

錯(cuò)誤示范(第二個(gè)代理失效):

 proxyTable: {
  // 第一個(gè)代理
  '/api-test': { 
  target: 'https://www.example.org:', /// 目標(biāo)服務(wù)器 host
  },
  //第二個(gè)代理
  '/api-testAAA': { 
  target: 'https://197.32.22.33:8090', 
}

這的錯(cuò)誤真的很難發(fā)現(xiàn),在查了源碼才看懂的;

這里說一下,為什么這樣寫會(huì)404!

vue的代理是基于 http-proxy-middleware實(shí)現(xiàn)的,而http-proxy-middleware對(duì)走哪個(gè)代理名稱的的方法如下:

function matchSingleStringPath(context, uri) {
 const pathname = getUrlPathName(uri);
 return pathname.indexOf(context) === 0;
}

是的!他用的是indexOf() === 0來判斷的!??!所以如果你的多個(gè)代理重疊/api-testAAA和/api-test這樣出現(xiàn)的話,他們是都會(huì)返回true的!

但是/api-test更快判斷完,所以/api-testAAA就失效了?。?!

結(jié)語

說明:Vue cil的版本號(hào)是2,老版本的項(xiàng)目了;之后會(huì)記錄下新版本vue cil 3+學(xué)習(xí)過程;

好了,吐槽完了,希望大家都不要踩坑~

補(bǔ)充知識(shí):關(guān)于Vue的生產(chǎn)環(huán)境proxyTable代理問題

1、通過在 config/index.js 配置文件中找到proxyTable配置項(xiàng)

dev: {
 // Paths
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 proxyTable: {
  '/api': { //3
  target: 'http://xxx:8080',
  changeOrigin: true,
// secure:false 代理https必須要加
  pathRewrite: {
   // 1 '^/api': '/api' 這種接口配置出來  http://xxx:8080/api/getlist
   // 2 ^/api': '/' 這種接口配置出來  http://xxx:8080/getlist
  }
  }
 }
 }

2、上面代碼里的1和2的區(qū)別

當(dāng)你接口有api的時(shí)候就需要^api的意思就是有api會(huì)首先使用api,防止被系統(tǒng)認(rèn)為3處的api,如果接口中沒有api則不需要,即可以省略,總結(jié):

接口以“/api”開頭的配置 數(shù)字1 ,沒有則不需要

3、如果配置多個(gè)代理

dev: {
 // Paths
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 proxyTable: {
  '/api': { //3
  target: 'http://xxx:8080',
  changeOrigin: true,
  pathRewrite: {
   // A '^/api': '/api' 這種接口配置出來  http://xxx:8080/api/getlist
   // ^/api': '/' 這種接口配置出來  http://xxx:8080/getlist
  }
  },
 '/api/1': { //
  target: 'http://xxx:8081',
  changeOrigin: true,
  pathRewrite: {
   // A '^/api/1': '/api/1' 這種接口配置出來  http://xxx:8081/api/1/getlist
   // ^/api/1': '/' 這種接口配置出來  http://xxx:80801/getlist
  }
  }
 
 }
 }

上面的調(diào)用接口的時(shí)候:

A /api/1/getlist 即可 http://xxx:8081/api/1/getlist

/api/getlist 即可 http://xxx:8080/api/getlist

第二種情況

/api/1/getlist 即可 http://xxx:8081/getlist

/api/getlist 即可 http://xxx:8080/getlist

以上這篇解決VueCil代理本地proxytable無效報(bào)錯(cuò)404的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue組件化開發(fā)的必備技能之組件遞歸

    Vue組件化開發(fā)的必備技能之組件遞歸

    組件是可以在它們自己的模板中調(diào)用自身的,不過它們只能通過?name?選項(xiàng)來做這件事,下面這篇文章主要給大家介紹了關(guān)于Vue組件化開發(fā)的必備技能之組件遞歸的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 詳解Vue.js分發(fā)之作用域槽

    詳解Vue.js分發(fā)之作用域槽

    本篇文章主要介紹了詳解Vue.js分發(fā)之作用域槽,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • bpmn-js在vue中的基本使用及操作功能

    bpmn-js在vue中的基本使用及操作功能

    這篇文章主要介紹了bpmn-js在vue中的基本使用及操作功能,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友跟隨小編一起看看吧
    2024-02-02
  • vue如何判斷dom的class

    vue如何判斷dom的class

    這篇文章主要介紹了vue如何判斷dom的class,vue點(diǎn)擊給dom添加class然后獲取含有class的dom文件,具體內(nèi)容詳情大家參考下本文
    2018-04-04
  • 在Vue-cli里應(yīng)用Vuex的state和mutations方法

    在Vue-cli里應(yīng)用Vuex的state和mutations方法

    今天小編就為大家分享一篇在Vue-cli里應(yīng)用Vuex的state和mutations方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 基于Vue如何封裝分頁組件

    基于Vue如何封裝分頁組件

    使用Vue做雙向綁定的時(shí)候,可能經(jīng)常會(huì)用到分頁功能,接下來通過本文給大家分享一個(gè)封裝分頁組件的方法,一起看看吧
    2016-12-12
  • Vue?Canvas實(shí)現(xiàn)電子簽名

    Vue?Canvas實(shí)現(xiàn)電子簽名

    這篇文章主要為大家詳細(xì)介紹了Vue?Canvas實(shí)現(xiàn)電子簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 詳解VScode編輯器vue環(huán)境搭建所遇問題解決方案

    詳解VScode編輯器vue環(huán)境搭建所遇問題解決方案

    這篇文章主要介紹了VScode編輯器vue環(huán)境搭建所遇問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • IOS上微信小程序密碼框光標(biāo)離開提示存儲(chǔ)密碼的完美解決方案

    IOS上微信小程序密碼框光標(biāo)離開提示存儲(chǔ)密碼的完美解決方案

    ios密碼框輸入密碼光標(biāo)離開之后會(huì)提示存儲(chǔ)密碼的彈窗,關(guān)于這樣的問題怎么解決呢,下面給大家分享IOS上微信小程序密碼框光標(biāo)離開提示存儲(chǔ)密碼的完美解決方案,感興趣的朋友一起看看吧
    2024-07-07
  • Vue2?響應(yīng)式系統(tǒng)之異步隊(duì)列

    Vue2?響應(yīng)式系統(tǒng)之異步隊(duì)列

    這篇文章主要介紹了Vue2?響應(yīng)式系統(tǒng)之異步隊(duì)列,文章基于Vue2?的相關(guān)資料展開對(duì)主題的詳細(xì)介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論

奎屯市| 来宾市| 元朗区| 九江市| 兴和县| 丘北县| 青铜峡市| 平湖市| 镇平县| 通河县| 龙陵县| 寻甸| 石首市| 玉林市| 南木林县| 监利县| 邛崃市| 华池县| 涪陵区| 贵州省| 永州市| 沈丘县| 鹿邑县| 平遥县| 南宫市| 青阳县| 湖南省| 东城区| 成武县| 青阳县| 河津市| 双流县| 广德县| 安岳县| 贵南县| 屯留县| 弥渡县| 内丘县| 乡城县| 寻乌县| 应城市|