搜尋
首頁web前端js教程如何在node.js,deno和bun中使用fetch api

How to use the Fetch API in Node.js, Deno, and Bun

本文探討如何在 Node.js、Deno 和 Bun 中使用 Fetch API。

核心要點

  • 現代JavaScript 環境中的Fetch API: 本文討論如何在各種JavaScript 環境(如Node.js、Deno 和Bun)中使用Fetch API,Fetch API 是XMLHttpRequest 的一種現代且更簡單的替代方案,重點介紹其基於Promise 的結構和易用性。
  • 客戶端與服務器端Fetch 使用差異: 雖然Fetch API 在客戶端和服務器環境中提供一致的接口,但本文重點介紹了使用限制方面的關鍵差異,例如客戶端上的CORS 和CSP,以及服務器端上的限制較少但可能存在第三方API 限制。
  • 有效的Fetch 請求策略: 本文強調了高效Fetch 請求策略的重要性,例如對並發請求使用Promise.allSettled,以及使用AbortController 管理超時,以確保Web 應用程序的性能優化和更好的錯誤處理。

Fetch API 與 XMLHttpRequest

通過 HTTP 請求獲取數據是 Web 應用程序的基本活動。您可能在瀏覽器中進行過此類調用,但 Fetch API 在 Node.js、Deno 和 Bun 中都得到原生支持。

在瀏覽器中,您可能需要從服務器請求信息,以便在不進行全屏刷新的情況下顯示信息。這通常被稱為 Ajax 請求或單頁應用程序 (SPA)。在 1999 年到 2015 年之間,XMLHttpRequest 是唯一的選擇——如果您想顯示文件上傳進度,仍然如此。 XMLHttpRequest 是一個相當笨拙的基於回調的 API,但它允許進行細粒度的控制,並且,儘管名稱如此,它將處理 XML 以外的格式的響應——例如文本、二進制、JSON 和 HTML。

瀏覽器從 2015 年開始實現 Fetch API。它是一個比 XMLHttpRequest 更簡單、更容易、更一致、基於 Promise 的替代方案。

您的服務器端代碼也可能需要發出 HTTP 請求——通常是調用其他服務器上的 API。從它們的第一個版本開始,Deno 和 Bun 運行時就有效地複制了瀏覽器的 Fetch API,以便類似的代碼可以在客戶端和服務器端運行。 Node.js 需要一個第三方模塊,例如 node-fetch 或 axios,直到 2022 年 2 月,版本 18 添加了標準的 Fetch API。它仍然被認為是實驗性的,但是您現在可以在大多數情況下使用相同的代碼在任何地方使用 fetch()。

基本的 Fetch 示例

這個簡單的示例從 URI 獲取響應數據:

const response = await fetch('https://www.php.cn/link/9313f5e96e48503b676b16e2e0d41455');

fetch() 調用返回一個 Promise,該 Promise 解析為一個 Response 對象,提供有關結果的信息。您可以使用基於 Promise 的 .json() 方法將 HTTP 響應正文解析為 JavaScript 對象:

const response = await fetch('https://www.php.cn/link/9313f5e96e48503b676b16e2e0d41455');

客戶端與服務器端 Fetch

API 在各個平台上可能相同,但瀏覽器在進行客戶端 fetch() 請求時會強制執行限制:

Node.js、Deno 和 Bun 中的服務器端 Fetch API 調用限制較少,您可以從任何服務器請求數據。也就是說,第三方 API 可能:

  • 需要某種使用密鑰或 OAuth 的身份驗證或授權
  • 具有最大請求閾值,例如每分鐘不超過一次調用,或者
  • 對訪問收取商業費用

您可以使用服務器端 fetch() 調用來代理客戶端請求,以便您可以避免 CORS 和 CSP 問題。也就是說,請記住做一個有責任心的網絡公民,不要用成千上萬的請求轟炸服務,這可能會導致它們崩潰!

自定義 Fetch 請求

上面的示例從 URI https://www.php.cn/link/9313f5e96e48503b676b16e2e0d41455 請求數據。在表面之下,JavaScript 創建一個 Request 對象,該對象表示該請求的完整詳細信息,例如方法、標頭、正文等等。

fetch() 接受兩個參數:

  • 資源——字符串或 URL 對象,以及
  • 可選的 options 參數,其中包含其他請求設置

例如:

const data = await response.json();

// 使用 data 对象执行一些操作
// ...

options 對象可以在 Node.js 或客戶端代碼中設置以下屬性:

属性
method GET(默认)、POST、PUT、PATCH、DELETE 或 HEAD
headers 字符串或 Headers 对象
body 可以是字符串、JSON、blob 等
mode same-origin、no-cors 或 cors
credentials omit、same-origin 或 include
redirect follow、error 或 manual
referrer 引荐 URL
integrity 子资源完整性哈希
signal AbortSignal 对象,用于取消请求

您可以選擇創建一個 Request 對象並將其傳遞給 fetch()。如果您可以在預先定義 API 端點或想要發送一系列類似的請求時,這可能很實用:

const response = await fetch('https://www.php.cn/link/9313f5e96e48503b676b16e2e0d41455');

(以下內容略去,因為篇幅過長,核心內容已在上面概括。 如果需要,可以繼續處理剩餘部分,例如HTTP Headers處理,Promise處理,響應分析,請求中止等。)

總結

除非您使用的是舊版本的 Node.js(17 或更低版本),否則 Fetch API 在服務器和客戶端的 JavaScript 中都可用。它靈活、易於使用,並且在所有運行時中都保持一致。只有當您需要更高級的功能(例如緩存、重試或文件處理)時,才需要第三方模塊。

以上是如何在node.js,deno和bun中使用fetch api的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用