
理解 Composition API Vue 的基礎(chǔ)與模式
├── src/ # 源代碼文件夾
│ ├── index.js # 主入口文件,應(yīng)用啟動的起點
│ └── ... # 其他源代碼文件
├── public/ # 靜態(tài)資源文件夾,如HTML、CSS、圖片等
│ └── index.html # 若有前端部分,這是默認的HTML入口文件
├── package.json # 項目配置文件,包含了依賴信息和腳本命令
├── .gitignore # Git忽略文件列表
├── README.md # 項目說明文檔
├── node_modules/ # 自動下載的Node.js依賴庫(不包含在版本控制中)
└── scripts/ # 可能包含自定義構(gòu)建或腳本工具
在該項目中,src/index.js
是應(yīng)用的主入口文件,負責啟動程序并處理核心邏輯。package.json
文件中定義了項目的依賴關(guān)系和啟動腳本。開發(fā)者可以根據(jù)項目需求調(diào)整配置文件和代碼結(jié)構(gòu)。
啟動文件主要是 src/index.js
。在Node.js環(huán)境中,通過 require
或其他導(dǎo)入機制來組織代碼,處理路由、業(yè)務(wù)邏輯等。若項目采用現(xiàn)代JavaScript標準如ES6 modules,則可能入口文件會有所不同,例如 index.mjs
或使用特定的打包配置指定入口。
主要關(guān)注點通常在 package.json
文件:
"start": "node src/index.js"
,用于啟動應(yīng)用。 此外,項目可能會涉及數(shù)據(jù)庫連接、API密鑰、環(huán)境變量等高級配置,可能會有額外的 .env
文件或是專門的配置文件(如 .config.js
, config.yml
),但具體取決于項目的實際實現(xiàn)。
fetch()
的功能與 XMLHttpRequest 基本相同,但有三個主要的差異:
在用法上,fetch()
接受一個 URL 字符串作為參數(shù),默認向該網(wǎng)址發(fā)出 GET 請求,返回一個 Promise 對象。基本用法如下:
fetch(url)
.then(response => response.json())
.then(json => console.log(json))
.catch(err => console.log('Request Failed', err));
Response 對象對應(yīng)服務(wù)器的 HTTP 回應(yīng),包含的數(shù)據(jù)通過 Stream 接口異步讀取。它還包含一些同步屬性,對應(yīng) HTTP 回應(yīng)的標頭信息(Headers),可以立即讀取。
可以通過以下代碼獲取Response對象的同步屬性:
const response = await fetch(url);
console.log(response.status);
console.log(response.statusText);
fetch 發(fā)出請求后,只有網(wǎng)絡(luò)錯誤,或無法連接時,fetch 才會報錯,其他情況都不會報錯,而是認為請求成功。需要通過 Response.status 屬性,得到 HTTP 回應(yīng)的真實狀態(tài)碼,才能判斷請求是否成功。
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
。
Response 對象根據(jù)服務(wù)器返回的不同類型的數(shù)據(jù),提供了不同的讀取方法:
response.text()
: 得到文本字符串。response.json()
: 得到 JSON 對象。response.blob()
: 得到二進制 Blob 對象。這些讀取方法都是異步的,返回的都是 Promise 對象。必須等到異步操作結(jié)束,才能得到服務(wù)器返回的完整數(shù)據(jù)。
Stream 對象只能讀取一次,讀取完就沒了。這意味著,前一節(jié)的五個讀取方法,只能使用一個,否則會報錯。Response 對象提供 Response.clone()
方法,創(chuàng)建 Response 對象的副本,實現(xiàn)多次讀取。
const response1 = await fetch('flowers.jpg');
const response2 = response1.clone();
const myBlob1 = await response1.blob();
const myBlob2 = await response2.blob();
問:Fetch API 和 XMLHttpRequest 有什么區(qū)別?
問:如何判斷 Fetch 請求是否成功?
response.status
屬性獲取 HTTP 回應(yīng)狀態(tài)碼,或使用 response.ok
屬性判斷請求是否成功。問:如何在 Fetch 中上傳文件?
FormData
對象,將文件數(shù)據(jù)附加到表單中,通過 fetch()
的 body
屬性發(fā)送。問:Fetch API 如何處理跨域請求?
問:如何取消正在進行的 Fetch 請求?
AbortController
對象,調(diào)用其 abort()
方法發(fā)送取消信號,停止請求。通過本指南,開發(fā)者可以更深入地理解 Fetch API 的安裝與使用,掌握其核心功能和最佳實踐,實現(xiàn)高效的網(wǎng)絡(luò)請求處理。