Axios 是一個流行的 HTTP 客戶端,用於在前端應用中與後端 API 進行溝通。它支持瀏覽器和 Node.js 環境,能夠輕鬆發送 GET、POST、PUT、DELETE 等請求,並且可以處理攔截請求、設定超時、攜帶自定義 Header 等場景。
首先,我們需要在專案中安裝 Axios。你可以使用 npm 或 yarn 來安裝它:
npm install axios
# or
yarn add axios
安裝完畢後,你可以在專案中導入 Axios 並開始發送請求。
最常見的請求是 GET 請求,通常用來從後端獲取資料。
以下是如何使用 Axios 發送一個簡單的 GET 請求來獲取資料的範例:
import axios from 'axios';
const fetchData = async () => {
try {
const response = await axios.get('https://api.example.com/data');
console.log('資料:', response.data);
} catch (error) {
console.error('錯誤:', error);
}
};
fetchData();
POST 請求通常用來向後端發送資料。
以下是一個使用 Axios 發送 POST 請求的範例,其中我們將資料發送到後端 API。
import axios from 'axios';
const postData = async () => {
try {
const response = await axios.post('https://api.example.com/data', {
name: 'John Doe',
age: 30,
});
console.log('回應:', response.data);
} catch (error) {
console.error('錯誤:', error);
}
};
postData();
有時我們需要在 GET 請求中帶查詢參數。Axios 支持使用 params
屬性來傳遞 URL 查詢參數。
const fetchDataWithParams = async () => {
try {
const response = await axios.get('https://api.example.com/data', {
params: {
userId: 123,
active: true,
},
});
console.log('資料:', response.data);
} catch (error) {
console.error('錯誤:', error);
}
};
fetchDataWithParams();
這會發送一個請求到 https://api.example.com/data?userId=123&active=true
。
在某些情況下,我們需要向後端 API 請求中添加自定義標頭 (headers),比如身份驗證標頭。你可以通過設定 headers
來攜帶這些自定義信息。
const fetchDataWithHeaders = async () => {
try {
const response = await axios.get('https://api.example.com/protected', {
headers: {
Authorization: 'Bearer your-token-here',
},
});
console.log('資料:', response.data);
} catch (error) {
console.error('錯誤:', error);
}
};
fetchDataWithHeaders();
這個範例中,我們攜帶了一個 Authorization
標頭來進行身份驗證。
攔截器 是 Axios 中的一個強大功能,允許你在請求發出或回應接收到之前攔截請求,並進行一些操作。這對於添加全局身份驗證標頭或處理錯誤響應非常有用。
請求攔截器可以在請求發送之前修改請求配置,例如自動附加身份驗證標頭。
axios.interceptors.request.use(
(config) => {
// 在發送請求之前做一些處理,例如添加 token
const token = 'your-token-here';
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => {
// 處理請求錯誤
return Promise.reject(error);
}
);
響應攔截器允許你在接收到回應後進行處理。例如,當身份驗證失效時可以自動登出或跳轉到登錄頁面。
axios.interceptors.response.use(
(response) => {
// 對響應資料進行處理
return response;
},
(error) => {
// 統一處理錯誤
if (error.response.status === 401) {
console.error('未經授權,請重新登錄');
}
return Promise.reject(error);
}
);
處理 API 請求中的錯誤是非常重要的,這能確保應用不會因為一次失敗的請求而崩潰。你可以在 catch
代碼塊中捕獲錯誤,並根據錯誤類型進行不同處理。
const fetchDataWithErrorHandling = async () => {
try {
const response = await axios.get('https://api.example.com/data');
console.log('資料:', response.data);
} catch (error) {
if (error.response) {
// 伺服器有回應,但狀態碼不是 2xx
console.error('錯誤狀態碼:', error.response.status);
console.error('錯誤資料:', error.response.data);
} else if (error.request) {
// 請求已發送但未收到回應
console.error('未收到伺服器回應', error.request);
} else {
// 其他錯誤
console.error('請求錯誤:', error.message);
}
}
};
fetchDataWithErrorHandling();
這段代碼會處理不同類型的錯誤情況,並根據具體情況給出錯誤提示。
你可以設定全局的 Axios 默認配置,這樣每次請求都會應用這些默認配置,減少冗餘代碼。例如,設定基礎 URL 和超時時間:
axios.defaults.baseURL = 'https://api.example.com/';
axios.defaults.timeout = 10000; // 10 秒超時
axios.defaults.headers.common['Authorization'] = 'Bearer your-token-here';
這樣,每次請求都會使用這個基礎 URL 和標頭。
有時候,你可能需要同時發送多個請求,並等待所有請求完成後再進行下一步。axios.all
可以同時發送多個請求,並使用 Promise.all
來處理結果。
const fetchMultipleData = async () => {
try {
const [response1, response2] = await Promise.all([
axios.get('https://api.example.com/data1'),
axios.get('https://api.example.com/data2'),
]);
console.log('資料1:', response1.data);
console.log('資料2:', response2.data);
} catch (error) {
console.error('錯誤:', error);
}
};
fetchMultipleData();
這會並行發送兩個 GET 請求,並等待兩個請求都完成後才處理資料。
Axios 是一個強大且靈活的 HTTP 客戶端,能夠幫助你輕鬆發送各類 HTTP 請求,並處理 API 的資料互動。在這篇文章中,我們介紹了如何使用 Axios 發送基本的 GET 和 POST 請求,以及如何攜帶參數、設定自定義標頭、處理錯誤、使用攔截器等進階功能。
通過熟練使用 Axios,無論是在小型應用還是大型專案中,你都能夠輕鬆地與後端 API 進行高效的資料互動。