├── src/ # 源代碼文件夾
│ ├── index.js # 主入口文件,應(yīng)用啟動(dòng)的起點(diǎn)
│ └── ... # 其他源代碼文件
├── public/ # 靜態(tài)資源文件夾,如HTML、CSS、圖片等
│ └── index.html # 若有前端部分,這是默認(rèn)的HTML入口文件
├── package.json # 項(xiàng)目配置文件,包含了依賴信息和腳本命令
├── .gitignore # Git忽略文件列表
├── README.md # 項(xiàng)目說(shuō)明文檔
├── node_modules/ # 自動(dòng)下載的Node.js依賴庫(kù)(不包含在版本控制中)
└── scripts/ # 可能包含自定義構(gòu)建或腳本工具

在該項(xiàng)目中,src/index.js 是應(yīng)用的主入口文件,負(fù)責(zé)啟動(dòng)程序并處理核心邏輯。package.json 文件中定義了項(xiàng)目的依賴關(guān)系和啟動(dòng)腳本。開(kāi)發(fā)者可以根據(jù)項(xiàng)目需求調(diào)整配置文件和代碼結(jié)構(gòu)。

項(xiàng)目的啟動(dòng)文件介紹

啟動(dòng)文件主要是 src/index.js。在Node.js環(huán)境中,通過(guò) require 或其他導(dǎo)入機(jī)制來(lái)組織代碼,處理路由、業(yè)務(wù)邏輯等。若項(xiàng)目采用現(xiàn)代JavaScript標(biāo)準(zhǔn)如ES6 modules,則可能入口文件會(huì)有所不同,例如 index.mjs 或使用特定的打包配置指定入口。

項(xiàng)目的配置文件介紹

主要關(guān)注點(diǎn)通常在 package.json 文件:

此外,項(xiàng)目可能會(huì)涉及數(shù)據(jù)庫(kù)連接、API密鑰、環(huán)境變量等高級(jí)配置,可能會(huì)有額外的 .env 文件或是專門(mén)的配置文件(如 .config.js, config.yml),但具體取決于項(xiàng)目的實(shí)際實(shí)現(xiàn)。

Fetch基本用法

fetch() 的功能與 XMLHttpRequest 基本相同,但有三個(gè)主要的差異:

  1. 使用 Promise:fetch 使用 Promise,不使用回調(diào)函數(shù),因此大大簡(jiǎn)化了寫(xiě)法,寫(xiě)起來(lái)更簡(jiǎn)潔。
  2. 模塊化設(shè)計(jì):fetch 采用模塊化設(shè)計(jì),API 分散在多個(gè)對(duì)象上(Response 對(duì)象、Request 對(duì)象、Headers 對(duì)象),更合理一些。
  3. 數(shù)據(jù)流處理:fetch 通過(guò)數(shù)據(jù)流(Stream 對(duì)象)處理數(shù)據(jù),可以分塊讀取,提高網(wǎng)站性能表現(xiàn),減少內(nèi)存占用。

在用法上,fetch() 接受一個(gè) URL 字符串作為參數(shù),默認(rèn)向該網(wǎng)址發(fā)出 GET 請(qǐng)求,返回一個(gè) Promise 對(duì)象。基本用法如下:

fetch(url)
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(err => console.log('Request Failed', err));

Response對(duì)象:處理HTTP回應(yīng)

Response 對(duì)象對(duì)應(yīng)服務(wù)器的 HTTP 回應(yīng),包含的數(shù)據(jù)通過(guò) Stream 接口異步讀取。它還包含一些同步屬性,對(duì)應(yīng) HTTP 回應(yīng)的標(biāo)頭信息(Headers),可以立即讀取。

可以通過(guò)以下代碼獲取Response對(duì)象的同步屬性:

const response = await fetch(url);
console.log(response.status);
console.log(response.statusText);

判斷請(qǐng)求是否成功

fetch 發(fā)出請(qǐng)求后,只有網(wǎng)絡(luò)錯(cuò)誤,或無(wú)法連接時(shí),fetch 才會(huì)報(bào)錯(cuò),其他情況都不會(huì)報(bào)錯(cuò),而是認(rèn)為請(qǐng)求成功。需要通過(guò) Response.status 屬性,得到 HTTP 回應(yīng)的真實(shí)狀態(tài)碼,才能判斷請(qǐng)求是否成功。

async function fetchText() {
  let response = await fetch('/readme.txt');
  if (response.status >= 200 && response.status < 300) {
    return await response.text();
  } else {
    throw new Error(response.statusText);
  }
}

另一種方法是判斷 response.ok 是否為 true。

讀取內(nèi)容的方法

Response 對(duì)象根據(jù)服務(wù)器返回的不同類型的數(shù)據(jù),提供了不同的讀取方法:

這些讀取方法都是異步的,返回的都是 Promise 對(duì)象。必須等到異步操作結(jié)束,才能得到服務(wù)器返回的完整數(shù)據(jù)。

Response.clone() 多次讀取

Stream 對(duì)象只能讀取一次,讀取完就沒(méi)了。這意味著,前一節(jié)的五個(gè)讀取方法,只能使用一個(gè),否則會(huì)報(bào)錯(cuò)。Response 對(duì)象提供 Response.clone() 方法,創(chuàng)建 Response 對(duì)象的副本,實(shí)現(xiàn)多次讀取。

const response1 = await fetch('flowers.jpg');
const response2 = response1.clone();

const myBlob1 = await response1.blob();
const myBlob2 = await response2.blob();

FAQ

  1. 問(wèn):Fetch API 和 XMLHttpRequest 有什么區(qū)別?

  2. 問(wèn):如何判斷 Fetch 請(qǐng)求是否成功?

  3. 問(wèn):如何在 Fetch 中上傳文件?

  4. 問(wèn):Fetch API 如何處理跨域請(qǐng)求?

  5. 問(wèn):如何取消正在進(jìn)行的 Fetch 請(qǐng)求?

通過(guò)本指南,開(kāi)發(fā)者可以更深入地理解 Fetch API 的安裝與使用,掌握其核心功能和最佳實(shí)踐,實(shí)現(xiàn)高效的網(wǎng)絡(luò)請(qǐng)求處理。

上一篇:

FastAPI 與 Flask 在機(jī)器學(xué)習(xí)方面的對(duì)比

下一篇:

探索 Fabric API Key 的使用與安全管理
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)