欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決VueCil代理本地proxytable無效報錯404的問題

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

前言

因為項目中遇到了這個bug:Vue cil2中配置代理proxytable成功,卻無效報錯404,在后端和代理都配置無誤的情況下,還是報404,先已解決,特記錄,希望能幫助到他人;

正文

1. 為什么要使用代理?

代理的作用是:把請求代理轉發(fā)到其他服務器的中間件;

例如:我們當前主機為http://localhost:8080/,現(xiàn)在我們有一個需求,如果我們請求/api,我們不希望由3000來處理這個請求,而希望由另一臺服務器https://www.example.org/api來處理這個請求怎么辦?

這時候就要使用代理來解決!

2. 在vue中如何使用多個代理?

module.exports = {
dev: {
 proxyTable: {
  // 第一個代理
  '/api-test': { 
  target: 'https://www.example.org:', /// 目標服務器 host
  ws:true, //是否啟用websocket
  secure: true, // 如果是https接口,需要配置這個參數(shù)
  changeOrigin: true, // // 默認false,是否需要改變原始主機頭為目標URL,是否跨域
  pathRewrite: {
   '^/api-test/old': '/api-test/new' // 重寫請求,比如我們源訪問的是api-test/old,那么請求會被解析為/api-test/new
  },
  //第二個代理
  '/api-else': { 
  target: 'https://197.32.22.33:8090', 
  ws:true, //是否啟用websocket
  secure: true, 
  changeOrigin: true, 
  pathRewrite: {
   '^/api-else': '' //默認寫法,如果不寫pathRewrite就是默認為空;
  },
  //第三個代理
  '/api-three': { 
  target: 'https://197.32.22.33:9090', 
  changeOrigin: true, 
  pathRewrite: {
   '^/api-three': '/api-three' //重寫請求,這樣本地請求不會有兩次/api-three
  },
  }
 },

上述代碼即可在vue-cil項目中配置代理;

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

那下面我們來解析一下為什么會:Vue代理本地proxytable成功,卻無效報錯404的幾種情況

3. bug 原因分析

1.在瀏覽器或postman中測試接口是否正常訪問;(最重要??!不然改半天都沒用)

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

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

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

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

是不是會好奇為什么會有兩個/api-else,因為在本地:http://localhost:8080/api-else相當于:https://197.32.22.33:8090,這才是正常的!

2.2 (參考寫法3)

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

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

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

3.請修改完config的index.js后,答應我一定重啟下項目npm run dev;

4.也是我這次bug的原因(正經臉,這個超級細微!)

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

錯誤示范(第二個代理失效):

 proxyTable: {
  // 第一個代理
  '/api-test': { 
  target: 'https://www.example.org:', /// 目標服務器 host
  },
  //第二個代理
  '/api-testAAA': { 
  target: 'https://197.32.22.33:8090', 
}

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

這里說一下,為什么這樣寫會404!

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

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

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

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

結語

說明:Vue cil的版本號是2,老版本的項目了;之后會記錄下新版本vue cil 3+學習過程;

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

補充知識:關于Vue的生產環(huán)境proxyTable代理問題

1、通過在 config/index.js 配置文件中找到proxyTable配置項

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ū)別

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

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

3、如果配置多個代理

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
  }
  }
 
 }
 }

上面的調用接口的時候:

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無效報錯404的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • vue 在單頁面應用里使用二級套嵌路由

    vue 在單頁面應用里使用二級套嵌路由

    這篇文章主要介紹了vue 在單頁面應用里使用二級套嵌路由,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue+iview動態(tài)渲染表格詳解

    vue+iview動態(tài)渲染表格詳解

    這篇文章主要為大家詳細介紹了vue+iview動態(tài)渲染表格的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • vue cli安裝使用less的教程詳解

    vue cli安裝使用less的教程詳解

    這篇文章主要介紹了vue-cli安裝使用less的教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • vue實現(xiàn)折線圖 可按時間查詢

    vue實現(xiàn)折線圖 可按時間查詢

    這篇文章主要為大家詳細介紹了vue實現(xiàn)折線圖,可按時間查詢,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • vue3在router中使用store報錯的完美解決方案

    vue3在router中使用store報錯的完美解決方案

    這篇文章主要介紹了vue3在router中使用store報錯解決方案,就是需要在實例化一下,因為在編譯router的時候pinia還未被實例化,文中補充介紹了vue3中router和store詳細使用教程方法,感興趣的朋友一起看看吧
    2023-11-11
  • 深入淺出分析vue2和vue3的區(qū)別

    深入淺出分析vue2和vue3的區(qū)別

    這篇文章主要介紹了vue2和vue3的區(qū)別,較為詳細的分析了vue2與vue3的常見區(qū)別與使用方法,需要的朋友可以參考下
    2023-06-06
  • vue2.0 axios前后端數(shù)據(jù)處理實例代碼

    vue2.0 axios前后端數(shù)據(jù)處理實例代碼

    本篇文章主要介紹了vue2.0 axios前后端數(shù)據(jù)處理實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Element-UI 解決el-table中圖片懸浮被遮擋問題小結

    Element-UI 解決el-table中圖片懸浮被遮擋問題小結

    在開發(fā)中,發(fā)現(xiàn)element-ui在el-table中添加圖片懸浮顯示時,會被單元格遮擋的問題,對于此問題解決其實也并不難,將懸浮圖片放在body節(jié)點下,通過定位顯示即可,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • vue 關閉瀏覽器窗口的時候,清空localStorage的數(shù)據(jù)示例

    vue 關閉瀏覽器窗口的時候,清空localStorage的數(shù)據(jù)示例

    今天小編就為大家分享一篇vue 關閉瀏覽器窗口的時候,清空localStorage的數(shù)據(jù)示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue數(shù)據(jù)更新了但在頁面上沒有顯示出來的解決方法

    vue數(shù)據(jù)更新了但在頁面上沒有顯示出來的解決方法

    有時候 vue 無法監(jiān)聽到數(shù)據(jù)的變化,導致數(shù)據(jù)變化但是視圖沒有變化,也就是數(shù)據(jù)更新了,但在頁面上沒有顯示出來,所以本文給出了三種解決方法,通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論