Thuta Learning
ရှာဖွေရန်
ProjectsWeb Developmentintermediate

Mini Project — Part 3: Error Handling နဲ့ Polish

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Mini Project — Part 3: Error Handling နဲ့ Polish ကို လက်တွေ့ project ထဲမှာ အသုံးချတတ်မယ်
  • ကိုယ်တိုင် code ရေးပြီး run ကြည့်တတ်မယ်
  • Project တစ်ခုလုံးကို အဆင့်လိုက် ဆောက်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Part 2 အထိ CRUD အားလုံး အလုပ်လုပ်ပေမယ့် Network error, 401 Unauthorized, 429 Too Many Requests စတာတွေ ဖြစ်လာရင် program က crash ဖြစ်သွားနိုင်ပါတယ်။ ဒီ Part မှာ Errors သင်ခန်းစာက error response body ကို parse လုပ်နည်း၊ Rate Limit သင်ခန်းစာက 429 status ကို ဘယ်လို handle လုပ်ရမလဲဆိုတာကို ပေါင်းစပ်ကာ request() ဆိုတဲ့ shared wrapper function တစ်ခု ရေးပါမယ်။ အားလုံးသော API call တွေကို ဒီ wrapper ကနေပဲ ဖြတ်သွားစေပြီး error handling logic ကို တစ်နေရာတည်းမှာ စုစည်းထားပါမယ်။ နောက်ဆုံးမှာ Versioning သင်ခန်းစာအတိုင်း Accept-Version header ကိုပါ ထည့်ပေးပြီး project ကို ပြီးပြည့်စုံအောင် README.md နဲ့ command list ကို မှတ်တမ်းတင်ကြပါမယ်။

လက်တွေ့ ဆောက်ကြည့်မယ်

request(method, path, body) ဆိုတဲ့ helper function ရေးပြီး fetch, error check, JSON parse logic တွေ အားလုံးကို ဒီထဲမှာ စုထားပါ။ Status 429 ဖြစ်ရင် Retry-After header (သို့) fixed delay နဲ့ maximum 3 ကြိမ်အထိ retry လုပ်တဲ့ exponential backoff logic ထည့်ပါ။ 4xx/5xx error တွေအတွက် response body ထဲက error.message ကို ထုတ်ပြီး user-friendly စာသားအနေနဲ့ console.error ထုတ်ပါ။ createUser/getUsers/updateUser/deleteUser အားလုံးကို request() wrapper ကို ခေါ်သုံးအောင် refactor လုပ်ပြီး၊ နောက်ဆုံးမှာ README.md ထဲ command list နဲ့ setup steps ကို ရေးသားပြီး project ပြီးပြည့်စုံအောင် ပြင်ဆင်ပါ။

Code နမူနာ

javascript
async function request(method, path, body, attempt = 1) {
  const res = await fetch(`${API_BASE_URL}${path}`, {
    method,
    headers: {
      Authorization: `Bearer ${API_TOKEN}`,
      'Content-Type': 'application/json',
      'Accept-Version': 'v1',
    },
    body: body ? JSON.stringify(body) : undefined,
  });

  if (res.status === 429 && attempt <= 3) {
    const delay = attempt * 1000; // exponential-ish backoff
    console.warn(`Rate limited, retrying in ${delay}ms...`);
    await new Promise((r) => setTimeout(r, delay));
    return request(method, path, body, attempt + 1);
  }

  const data = await res.json().catch(() => ({}));
  if (!res.ok) {
    throw new Error(data.error?.message || `Request failed: ${res.status}`);
  }
  return data;
}
You should see
Rate limit (429) ဖြစ်ရင် CLI က crash မဖြစ်ဘဲ retry message ပြသပြီး automatic ပြန်ကြိုးစားကာ 401/404 ကဲ့သို့ error တွေမှာလည်း readable message ပြပေးပါလိမ့်မယ်။

၅ မိနစ် စမ်းကြည့်

5 မိနစ်အတွင်း API_TOKEN ကို တမင် မှားသတ်မှတ်ပြီး request() ကို run ကြည့်ကာ error message က user-friendly ဖြစ်မဖြစ် စစ်ဆေးပါ။

သတိလေးတစ်ချက်

Retry logic ကို aggressive လွန်းအောင် delay မထားဘဲ run ရင် rate limit ကို ပိုဆိုးအောင် ဖြစ်စေနိုင်တဲ့အတွက် Rate Limit သင်ခန်းစာက guideline အတိုင်း backoff delay ကို လေးစားပါ။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Retry logic မှာ maximum attempt limit မထားဘဲ infinite loop ဖြစ်သွားတတ်ကြပါတယ်
  • catch block ထဲမှာ error ကို console.log မလုပ်ဘဲ silent fail ဖြစ်အောင် ချန်ထားတတ်ကြပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

5 မိနစ်အတွင်း API_TOKEN ကို တမင် မှားသတ်မှတ်ပြီး request() ကို run ကြည့်ကာ error message က user-friendly ဖြစ်မဖြစ် စစ်ဆေးပါ။

You'll know it worked when: Rate limit (429) ဖြစ်ရင် CLI က crash မဖြစ်ဘဲ retry message ပြသပြီး automatic ပြန်ကြိုးစားကာ 401/404 ကဲ့သို့ error တွေမှာလည်း readable message ပြပေးပါလိမ့်မယ်။

Mini Project — Part 3: Error Handling နဲ့ Polish | Thuta Learning