TanStackIntermediate
Axios Setup — Instance ও Interceptors
Axios instance, baseURL, timeout, request/response interceptors এবং env variables — বাংলায়।
12টি অংশবাংলা ভাষায়
Axios হলো promise-based HTTP client। সরাসরি fetch-এর চেয়ে Axios-এ interceptor, timeout, এবং বিল্ট-ইন error handling সহজ। আমরা একটি একক instance তৈরি করব — পুরো project একই config ব্যবহার করবে।
fetch vs axios
| বিষয় | fetch | axios |
|---|---|---|
| JSON | res.json() ম্যানুয়াল | স্বয়ংক্রিয় res.data |
| Timeout | AbortController জটিল | timeout option |
| Interceptors | নেই | request/response middleware |
| Error handling | HTTP error-এও resolve করে | status ছাড়া reject করে |
| লাইব্রেরি আকার | built-in | ছোট dependency |
Axios instance
src/lib/axios.tsts
ts
import axios from "axios";
// একটাই instance সারা project
export const api = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_URL ?? "/api",
timeout: 10_000,
headers: { "Content-Type": "application/json" },
});NEXT_PUBLIC_API_URL .env.local-এ দিন। Next.js-এ NEXT_PUBLIC_ prefix-যুক্ত variable client-side-এ প্রকাশ পায়।
.env.localtext
text
# লোকাল ডেভে route handlers-কে calls → base "/api" ধরেই থাকে
# রিয়েল REST API থাকলে:
NEXT_PUBLIC_API_URL=https://api.example.comRequest interceptor — token
axios.ts (agenda)ts
ts
api.interceptors.request.use((config) => {
const token = localStorage.getItem("token"); // বা cookie থেকে
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});Response error handling
Error normalizationts
ts
api.interceptors.response.use(
(response) => response,
(error) => {
// সার্ভার থেকে error message বের করি
const message =
error.response?.data?.message ??
error.message ??
"অজানা সমস্যা হয়েছে";
return Promise.reject(new Error(message));
}
);localStorage-এ token সাবধান
Authentication-এর detail এই কোর্সের বাইরে, তবে জেনে রাখুন — production-এ token সাধারণত HttpOnly cookie-তে থাকে, আমাদের মতো localStorage-এ নয়। বাস্তব project-এ auth middleware ব্যবহার করুন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।