Axios: Interceptors และ Base URL
สร้างอินสแตนซ์ Axios ด้วย baseURL แนบโทเค็นยืนยันตัวตนในตัวดักคำขอ และจัดการข้อผิดพลาด 4xx/5xx ในตัวดักการตอบกลับ
Axios: Interceptors และ Base URL เป็นบทเรียน Frontend Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Frontend Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้แอ็กซิออส
แอ็กซิออสคือไคลเอ็นต์สำหรับคำขอผ่านเครือข่ายที่ได้รับความนิยมและสร้างอยู่บนกลไกส่งคำขอของเบราว์เซอร์ โดยเพิ่มความสามารถต่าง ๆ ได้แก่ การจัดการ JSON อัตโนมัติ ตัวดักคำขอและการตอบกลับ การกำหนดค่า baseURL ระยะหมดเวลา และโทเค็นสำหรับยกเลิกคำขอ หลายทีมยังคงเลือกใช้แอ็กซิออสมากกว่า fetch
การติดตั้งแอ็กซิออส
ติดตั้งผ่านตัวจัดการแพ็กเกจ ชุดโปรแกรมสำหรับเบราว์เซอร์มีขนาดประมาณ 14 กิโลไบต์เมื่อบีบอัดแบบจีซิป
npm install axiosGET และ POST พื้นฐาน
แอ็กซิออสจะแปลงเนื้อหา JSON เป็นสตริงโดยอัตโนมัติ และแยกวิเคราะห์การตอบกลับ JSON ให้อัตโนมัติ จึงไม่ต้องเรียก JSON.stringify หรือ .json() ด้วยตนเอง
import axios from 'axios';
const { data } = await axios.get('/api/users');
console.log(data); // already parsed
const res = await axios.post('/api/users', { name: 'Alice' });
console.log(res.data, res.status);การสร้างอินสแตนซ์แอ็กซิออส
สร้างอินสแตนซ์ที่กำหนดค่าไว้สำหรับส่วนติดต่อโปรแกรมประยุกต์ของคุณ เพื่อไม่ต้องเขียนที่อยู่หลัก ส่วนหัว และระยะหมดเวลาซ้ำในทุกคำขอ
import axios from 'axios';
export const api = axios.create({
baseURL: import.meta.env.VITE_API_URL,
timeout: 10000,
headers: { 'Content-Type': 'application/json' }
});
// Use it:
const { data } = await api.get('/users');
const res = await api.post('/users', { name: 'Alice' });ตัวดักคำขอ: โทเค็นการยืนยันตัวตน
แทรกโทเค็นการยืนยันตัวตนในทุกคำขอโดยไม่ต้องเขียนโค้ดซ้ำ
api.interceptors.request.use((config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});ตัวดักการตอบกลับ: ข้อผิดพลาดทั่วระบบ
รวมการจัดการข้อผิดพลาดสำหรับการตอบกลับทั้งหมดไว้ที่เดียว เช่น เปลี่ยนเส้นทางเมื่อได้รับ 401 และแสดงข้อความแจ้งเตือนเมื่อเกิด 5xx เป็นต้น
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
window.location.href = '/login';
}
if (error.response?.status >= 500) {
toast.error('Server error. Please try again.');
}
return Promise.reject(error);
}
);การรีเฟรชโทเค็นเมื่อได้รับ 401
ใช้ตัวดักการตอบกลับเพื่อตรวจจับ 401 รีเฟรชโทเค็น และลองส่งคำขอเดิมอีกครั้งโดยไม่ให้ผู้ใช้สังเกตเห็น
api.interceptors.response.use(null, async (error) => {
const originalRequest = error.config;
if (error.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const newToken = await refreshToken();
localStorage.setItem('token', newToken);
originalRequest.headers.Authorization = `Bearer ${newToken}`;
return api(originalRequest); // retry
}
return Promise.reject(error);
});พารามิเตอร์ URL และคิวรี
Axios รองรับออบเจ็กต์ params ซึ่งจะถูกแปลงเป็นสตริงคิวรีโดยอัตโนมัติ
const { data } = await api.get('/search', {
params: { q: 'react hooks', page: 2 }
});
// GET /search?q=react+hooks&page=2ระยะหมดเวลา
กำหนดระยะหมดเวลาของคำขอเพื่อป้องกันไม่ให้คำขอค้างเมื่อเซิร์ฟเวอร์ตอบสนองช้า
api.get('/slow-endpoint', { timeout: 5000 })
.catch(err => {
if (err.code === 'ECONNABORTED') {
console.log('Request took too long');
}
});การยกเลิกคำขอ
ใช้ AbortController (Axios รุ่นใหม่) หรือ CancelToken (API รุ่นเก่า)
const controller = new AbortController();
api.get('/big-data', { signal: controller.signal })
.catch(err => {
if (axios.isCancel(err)) console.log('cancelled');
});
controller.abort();โครงสร้างออบเจ็กต์ข้อผิดพลาด
ข้อผิดพลาดของ Axios จะมี error.response (เซิร์ฟเวอร์ตอบกลับด้วยสถานะข้อผิดพลาด), error.request (ไม่ได้รับการตอบกลับ) หรือไม่มีทั้งสองอย่าง (การตั้งค่าคำขอล้มเหลว)
Axios เทียบกับ Fetch — ควรเลือกใช้เมื่อใด
Axios: API ใช้งานสะอาดกว่า มีตัวดักจับในตัว และจัดการข้อผิดพลาดได้กระชับกว่า Fetch: เป็นความสามารถในตัว มีชุดรวมขนาดเล็กกว่า และรองรับการสตรีมแบบสมัยใหม่ โปรเจกต์ใหม่มักเลือก fetch ร่วมกับตัวห่อหุ้มขนาดเล็ก ส่วนโปรเจกต์เดิมที่ใช้ Axios มักไม่ย้ายระบบ
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ฟีเจอร์ใดของ Axios ที่ช่วยให้คุณเพิ่มส่วนหัว Authorization ในคำขอ ทุกคำขอ ได้โดยไม่ต้องแก้ไขการเรียกใช้แต่ละครั้ง
สรุป: Axios
ใช้ axios.create() เพื่อสร้างอินสแตนซ์ที่กำหนดค่าไว้พร้อม baseURL และ timeout การตอบกลับ JSON จะถูกแปลงโดยอัตโนมัติ (res.data) ตัวดักจับคำขอจะเพิ่มโทเค็น ส่วนตัวดักจับการตอบกลับจะจัดการข้อผิดพลาดและต่ออายุโทเค็น ใช้ออบเจ็กต์พารามิเตอร์สำหรับสตริงคิวรี ใช้ AbortController เพื่อยกเลิกคำขอ เลือก Axios หากต้องการความเรียบร้อย หรือใช้ fetch ร่วมกับตัวห่อหุ้มเพื่อให้ชุดรวมมีขนาดเล็กลง
คำถามที่พบบ่อย
บทเรียน “Axios: Interceptors และ Base URL” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Axios: Interceptors และ Base URL” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Frontend Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Axios: Interceptors และ Base URL”
สร้างอินสแตนซ์ Axios ด้วย baseURL แนบโทเค็นยืนยันตัวตนในตัวดักคำขอ และจัดการข้อผิดพลาด 4xx/5xx ในตัวดักการตอบกลับ คุณปฏิบัติ Frontend Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Frontend Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Frontend Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “Axios: Interceptors และ Base URL” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Frontend Academy นี้ได้ไหม
ได้ บทเรียน Frontend Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Fetch API: GET, POST, PUT และ DELETE
- Axios: Interceptors และ Base URL
- การจัดการข้อผิดพลาด: รหัสสถานะ HTTP
- SWR และ React Query สำหรับแคชข้อมูล