亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript如何攔截全局Fetch的請求與響應詳解

 更新時間:2024年04月15日 10:20:13   作者:SailingCoder  
全局的fetch()方法用于發(fā)起獲取資源的請求,它返回一個promise,這個promise會在請求響應后被resolve,并傳回Response對象,這篇文章主要給大家介紹了關于JavaScript如何攔截全局Fetch的請求與響應的相關資料,需要的朋友可以參考下

前言

目前,團隊采用了根路徑轉發(fā)的方式,將接口請求轉發(fā)到服務器上,實現了一定的解耦。然而,隨著團隊后端策略的變化,現在希望前端直接請求一個新的接口域名,而不再經過中間層的處理。在這種情況下,由于之前的代碼中沒有對接口請求進行統(tǒng)一的封裝,需要考慮如何以最小的成本進行遷移。

Fetch API簡介

Fetch API是一種用于進行網絡請求和響應的現代Web API。它提供了一種簡單、強大且靈活的方式來處理HTTP請求。在使用Fetch API時,我們通常創(chuàng)建一個請求對象,然后使用fetch函數發(fā)送請求,并處理返回的Promise。

// GET請求示例:
fetch('https://your.api.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

// POST請求示例:
fetch('https://your.api.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ id: 123, name: 'admin' }),
})
  .then(response => response.json())
  .then(data => console.log('POST Request:', data))
  .catch(error => console.error('POST Request Error:', error));

總體來說,使用Fetch API發(fā)送GET和POST請求的基本是相似的,但在POST請求中需要額外處理請求方法和請求體的數據。

注意:尤其是其中 GET 請求代碼的極簡風格,所以有時為了省事,直接就使用了fetch。這也為后面請求和響應的以及錯誤處理帶來不便性。有的伙伴可能會大面積的去改代碼,這樣不僅費時間,而且還需要測試,

全局Fetch攔截的需求

在一些情況下,我們可能希望在整個應用程序范圍內攔截和處理所有的Fetch請求和響應。這可能是為了添加全局的身份驗證、記錄請求和響應、處理錯誤等目的。為了實現這一點,我們可以使用window.fetch來攔截全局的Fetch。

攔截請求

要攔截全局的Fetch請求,我們可以重寫window.fetch方法。我們可以在這個方法中添加自定義的邏輯,然后調用原始的fetch方法。下面是一個簡單的例子:

const originalFetch = window.fetch;

window.fetch = function(url, options) {
  // 添加你的自定義邏輯
  console.log('Intercepted request to:', url);

  // 調用原始的fetch方法
  return originalFetch(url, options);
};

// 使用攔截后的fetch
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

在上面的例子中,我們簡單地在攔截函數中輸出了請求的URL,并在最后調用了原始的fetch方法。這樣,我們就能在每個全局的Fetch請求之前執(zhí)行自定義的邏輯。

攔截響應

類似地,我們也可以攔截全局的Fetch響應。這可以讓我們在處理響應之前添加一些通用的邏輯,比如檢查響應的狀態(tài)碼、處理錯誤等。

const originalFetch = window.fetch;

window.fetch = function(url, options) {
  // 調用原始的fetch方法
  return originalFetch(url, options)
    .then(response => {
      // 添加你的自定義響應邏輯
      console.log('Intercepted response from:', url);

      // 返回原始的響應
      return response;
    });
};

// 使用攔截后的fetch
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

在這個例子中,我們在攔截函數中輸出了響應的URL,并在最后返回了原始的響應。這允許我們在處理全局的Fetch響應之前執(zhí)行自定義的邏輯。

處理錯誤

在實際應用中,我們還需要考慮到錯誤處理。如果攔截過程中發(fā)生了錯誤,我們應該能夠適當地處理它們,以避免對應用程序的其他部分造成負面影響。

const originalFetch = window.fetch;

window.fetch = function(url, options) {
  try {
    // 添加你的自定義請求邏輯
    console.log('Intercepted request to:', url);

    // 調用原始的fetch方法
    return originalFetch(url, options)
      .then(response => {
        // 添加你的自定義響應邏輯
        console.log('Intercepted response from:', url);

        // 返回原始的響應
        return response;
      })
      .catch(error => {
        // 處理全局Fetch響應錯誤
        console.error('Intercepted response error:', error);
        throw error;
      });
  } catch (error) {
    // 處理全局Fetch請求錯誤
    console.error('Intercepted request error:', error);
    return Promise.reject(error);
  }
};

// 使用攔截后的fetch
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

在上述例子中,我們使用了trycatch塊來捕獲可能發(fā)生的錯誤,并進行相應的處理。這有助于確保全局Fetch攔截不會導致應用程序的崩潰或不穩(wěn)定。

附:fetch/xhr和其他請求的區(qū)別

fetch/xhr和其他請求(如axios、ajax等)之間的主要區(qū)別在于它們的使用方式和一些功能上的不同。

首先,fetch是一種基于Promise的現代化網絡請求API,而xhr是一種傳統(tǒng)的XMLHttpRequest對象。fetch API基于新的web標準,可以更好地處理請求和響應,支持更多現代化的功能,而xhr則是老舊的方式。

另一個區(qū)別在于fetch API返回的是一個Promise對象,可以使用Promise的鏈式調用和async/await語法,非常方便處理異步操作。而xhr則需要使用回調函數來處理異步操作,代碼結構可能相對復雜。

此外,fetch API默認情況下不會攜帶cookie信息,需要設置credentials屬性為"include"才能發(fā)送cookie。而xhr默認會發(fā)送cookie信息,需要手動設置xhr.withCredentials屬性為true來禁止發(fā)送cookie。

另外,fetch API在默認情況下只會拒絕請求錯誤的狀態(tài)碼(如404或500等),而不會拒絕其他的網絡錯誤(如網絡超時)。這意味著需要手動檢查并處理網絡錯誤。而xhr則可以通過onerror事件來處理所有類型的網絡錯誤。

最后,fetch API在使用上可能相對簡單,語法更加直觀。而xhr則相對復雜,需要手動設置請求頭、處理請求和響應等。

總結起來,fetch/xhr和其他請求的主要區(qū)別在于使用方式、功能支持和代碼結構等方面。fetch提供了更現代化、更簡潔的API,支持Promise和async/await語法,但xhr仍然是一種可靠和廣泛使用的老舊方式。

總結

到此這篇關于JavaScript如何攔截全局Fetch的請求與響應的文章就介紹到這了,更多相關js攔截全局Fetch請求和響應內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JS控制對象移動效果

    JS控制對象移動效果

    用js實現對象的移動,不錯的應用
    2008-09-09
  • 原生javascript實現讀寫CSS樣式的方法詳解

    原生javascript實現讀寫CSS樣式的方法詳解

    最近學習中遇到這個問題,為了日后方便查詢,本人翻閱了一些資料總結了以下方法,僅限原生JS,如有不對的地方歡迎指出!只求大家看完覺得有學到點什么就OK了!下面這篇文章主要介紹了利用原生javascript實現讀寫CSS樣式的方法,需要的朋友可以參考下。
    2017-02-02
  • web頁面和微信小程序頁面實現瀑布流效果

    web頁面和微信小程序頁面實現瀑布流效果

    這篇文章主要介紹了web頁面和微信小程序頁面實現瀑布流效果,本文通過實例代碼圖文介紹,給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-09-09
  • js 點擊a標簽 獲取a的自定義屬性方法

    js 點擊a標簽 獲取a的自定義屬性方法

    下面小編就為大家?guī)硪黄猨s 點擊a標簽 獲取a的自定義屬性方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • JS實現基本的網頁計算器功能示例

    JS實現基本的網頁計算器功能示例

    這篇文章主要介紹了JS實現基本的網頁計算器功能,涉及JavaScript事件響應及數值運算相關操作技巧,需要的朋友可以參考下
    2020-01-01
  • 微信小程序點擊左上角返回彈窗提示解決思路

    微信小程序點擊左上角返回彈窗提示解決思路

    當頁面表單沒有提交直接返回時,要提示用戶是否保存當前信息,如果已經提交就不提示了,下面小編給大家?guī)砹宋⑿判〕绦螯c擊左上角返回彈窗提示解決思路,感興趣的朋友一起看看吧
    2024-06-06
  • JavaScript Promise啟示錄

    JavaScript Promise啟示錄

    近幾年隨著JavaScript開發(fā)模式的逐漸成熟,CommonJS規(guī)范順勢而生,其中就包括提出了Promise規(guī)范,Promise完全改變了js異步編程的寫法,讓異步編程變得十分的易于理解
    2014-08-08
  • Javascript 實現復制(Copy)動作方法大全

    Javascript 實現復制(Copy)動作方法大全

    現在瀏覽器種類也越來越多,諸如 IE、Firefox、Chrome、Safari等等,因此現在要實現一個js復制內容到剪貼板的小功能就不是一件那么容易的事了。
    2014-06-06
  • 微信小程序云開發(fā) 生成帶參小程序碼流程

    微信小程序云開發(fā) 生成帶參小程序碼流程

    這篇文章主要為大家詳細介紹了微信小程序云開發(fā),生成帶參小程序碼,云函數網絡請求,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 微信小程序整合使用富文本編輯器的方法詳解

    微信小程序整合使用富文本編輯器的方法詳解

    這篇文章主要介紹了微信小程序整合使用富文本編輯器的方法,結合實例形式分析了微信小程序整合與使用富文本插件WxParse相關步驟與操作技巧,需要的朋友可以參考下
    2019-04-04

最新評論