之前有一篇是 useFetch 使用示範,useFetch 主要是在元件的 setup 函式中呼叫 API 使用,而其他依據使用者操作需要呼叫 API 的部分則主要是使用 $fetch 。
可以使用下面的方式呼叫:
帶入 Header:
參考資料:
Nuxt3 - $fetch
Nuxt3 - Data fetching
最簡單示範
假設有個 API 連結:http://localhost:8888/users/1 回傳結果為:{"id":1,"name":"小明"}可以使用下面的方式呼叫:
const url = 'http://localhost:8888/users/1';
const response = await $fetch(url, {
method: 'GET',
});
const json = JSON.stringify(response)
console.log(`result: ${json}`); // result: {"id":1,"name":"小明"}
帶入 Header:
const url = 'http://localhost:8888/users/1';
const response = await $fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
"Authorization": "Bearer aaa.bbb.ccc"
},
});
TypeScript 定義回傳值屬性
const url = 'http://localhost:8888/users/1';
const response = await $fetch<{ id: number; name: string }>(url, {
method: 'GET',
});
處理失敗情況
const url = 'http://localhost:8888/users/1';
const response = await $fetch(url, {
method: 'GET',
})
.then((response) => {
console.log("取得回應: " + JSON.stringify(response));
return response; // 不回傳的話,外面的 response 就會是 undefined
}).catch((error) => {
console.error('發生錯誤:', error);
});
攔截器 - 使用非同步方式取得回應
const url = 'http://localhost:8888/users/1';
const response = await $fetch(url, {
method: 'GET',
onRequest({request}) {
console.log(`發送請求`);
},
onRequestError({error}) {
console.log(`請求出現錯誤: ${error}`);
},
onResponse({response}) {
console.log(`response.status: ${response.status}`)
console.log(`成功取得回應: ${JSON.stringify(response)}`);
},
onResponseError({response}) {
console.log(`取得回應失敗`);
},
})
參考資料:
Nuxt3 - $fetch
Nuxt3 - Data fetching
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com