學習使用 fetch、axios 和錯誤處理進行 JavaScript API 操作。API 操作是指對伺服器進行 HTTP 請求,以獲取或發送數據。
你好,我的前端開發夥伴們,今天我將討論 JavaScript 中一個最重要的概念:API 操作。
scrib.show
來顯示結果,這相當於 console.log
。讓我們深入了解
目錄
<a id="what-is-api"></a>
<a id="what-is-api-handling"></a>
API 操作是指對伺服器進行 HTTP 請求,以獲取或發送數據。在 JavaScript 和 React 中,API 請求通常使用 fetch、Axios 或類似 React Query 或 TanStack Query 的庫來處理。
<a id="http-methods"></a>
API 使用不同的 HTTP 方法,每種方法有其特定的用途:
GET
– 從伺服器獲取數據。POST
– 向伺服器發送新數據。PUT
– 更新現有數據(替換整個資源)。PATCH
– 更新現有資源的一部分。DELETE
– 從伺服器刪除數據。<a id="making-api-request-in-javascript"></a>
<a id="fetch-method"></a>
原生 fetch API 方法通常用於與 API 進行交互。它接受 2 個參數 - API 端點和選項對象,用於傳遞標頭、主體、方法等。
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(response => response.json())
.then(data => scrib.show(data))
.catch(error => scrib.show('錯誤:', error));
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST', // 方法類型 GET, POST, PUT, DELETE
headers: {
'Content-Type': 'application/json' // 標頭類型,如來源、Bearer、內容類型、自定義標頭等。
},
// 要傳送到 API 的 POST 請求主體
body: JSON.stringify({
title: 'JavaScript 是偉大的',
body: '你知道你可以在 Scribbler 中寫 HTML 和 JavaScript 組合嗎',
userId: 1
})
})
.then(response => response.json())
.then(data => scrib.show(data))
.catch(error => scrib.show('錯誤:', error));
fetch('https://jsonplaceho.typicode.com/posts') // 錯誤的 API 端點
.then(response => response.json())
.then(data => scrib.show(data))
.catch(error => scrib.show('錯誤:', error)); // 將運行這段代碼並拋出錯誤
async function getData() {
try {
let response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
if (!response.ok) throw new Error('網絡響應不是正常狀態'); // 返回有效/無效響應的布林值
let data = await response.json();
scrib.show(data)
} catch (error) {
scrib.show('獲取錯誤:', error); // 如果 fetch 失敗,將處理錯誤
} finally {
scrib.show('Fetch 請求已完成'); // 無論響應是否有效或 fetch 是否失敗,這段代碼將運行
}
}
getData()
查看這個嵌入以運行上面提到的代碼範例
https://app.scribbler.live/?jsnb=github:ShubhamTiwari909/api-handling-scribbler/fetch-method&hide-menu=true&hide-code=false
<a id="axios"></a>
Axios 是一個 JavaScript 庫,它簡化了 API 操作並提供了更好的錯誤處理。
import axios from "axios"
// 所有 HTTP 方法都可以與 axios 連鎖使用
axios.get('https://jsonplaceholder.typicode.com/posts/1')
.then(response => scrib.show(response.data))
.catch(error => scrib.show('錯誤:', error));
import axios from "axios"
// JSON 主體作為第二個參數單獨傳遞,其他選項作為第三個參數
axios.post('https://jsonplaceholder.typicode.com/posts', {
title: 'JavaScript 是偉大的',
body: '你知道你可以在 Scribbler 中寫 HTML 和 JavaScript 組合嗎',
userId: 1
}, {
headers: { 'Content-Type': 'application/json' }
})
.then(response => scrib.show(response.data)) // 自動將響應轉換為 JSON 格式
.catch(error => scrib.show('錯誤:', error));
import axios from "axios"
axios.get('https://jsonpl.typicode.com/posts') // 錯誤的網址
.then(response => scrib.show(response.data))
.catch(error => {
// 對於不同情況有多種錯誤響應
if (error.response) {
scrib.show('伺服器響應狀態為:', error.response.status);
} else if (error.request) {
scrib.show('未收到響應');
} else {
scrib.show('設置請求錯誤:', error.message);
}
});
import axios from "axios";
const fetchData = async () => {
try {
const response = await axios.get("https://jsonplaceholder.typicode.com/posts");
console.log("數據成功獲取:", response.data);
return response.data;
} catch (error) {
console.error("獲取數據時出現錯誤:", error.response?.data || error.message);
return null;
} finally {
console.log("獲取已完成")
}
};
fetchData();
<a id="react"></a>
import { useEffect, useState } from 'react';
function Posts() {
// 為數據和錯誤消息創建狀態
const [posts, setPosts] = useState([]);
const [error, setError] = useState(null);
// 在 useEffect 中執行數據獲取,僅在頁面加載時執行一次
useEffect(() => {
fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => {
if (!response.ok) {
throw new Error('獲取失敗');
}
return response.json();
})
.then(data => setPosts(data))
.catch(error => setError(error.message));
}, []);
if (error) return <p>錯誤: {error}</p>;
return (
<div>
<h2>文章</h2>
<ul>
{posts.map(post => (
<li key={post.id}>{post.title}</li>
))}
</ul>
</div>
);
}
export default Posts;
<a id="tanstack-query"></a>
import { useQuery } from '@tanstack/react-query';
import axios from 'axios';
// 獲取數據並返回
const fetchPosts = async () => {
const { data } = await axios.get('https://jsonplaceholder.typicode.com/posts');
return data;
};
function Posts() {
// tanstack 內建數據、錯誤、加載狀態
const { data: posts, error, isLoading } = useQuery({ queryKey: ['posts'], queryFn: fetchPosts });
if (isLoading) return <p>加載中...</p>;
if (error) return <p>錯誤: {error.message}</p>;
return (
<ul>
{posts.map(post => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}
export default Posts;
<a id="conclusion"></a>
JavaScript 和 React 中的 API 操作涉及:
這就是本篇文章的內容,讓我知道是否可以對這篇文章進行改進。此外,請檢查 Scribbler.live 網站。
Instagram - https://www.instagram.com/supremacism__shubh/
LinkedIn - https://www.linkedin.com/in/shubham-tiwari-b7544b193/
電子郵件 - [email protected]
你可以透過以下鏈接幫我一些捐助,謝謝👇👇
https://www.buymeacoffee.com/waaduheck
也可以查看這些文章
{% link https://dev.to/shubhamtiwari909/javascript-objects-explained-a-practical-guide-for-devs-lkc
{% link https://dev.to/shubhamtiwari909/microfrontend-react-solid-vue-333b
{% link https://dev.to/shubhamtiwari909/codium-ai-assistant-for-devs-57of
{% link https://dev.to/shubhamtiwari909/zustand-a-beginners-guids-fh7
原文出處:https://dev.to/shubhamtiwari909/mastering-api-handling-in-javascript-react-a-complete-guide-45kk