ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
ဒီ lesson က Express Intro, Express Routing, Async & Promises, API Intro/GET/POST သင်ခန်းစာတွေရဲ့ knowledge ကို ပေါင်းစပ်ပြီး ပိုကျယ်ပြန့်တဲ့ practice တွေ လုပ်ကြည့်ဖို့ ရည်ရွယ်ပါတယ်။ Task အားလုံးက ပထမ lesson ထက် တစ်ဆင့်တိုးပြီး route parameter, async function, နဲ့ in-memory array ကို data store အဖြစ်သုံးပြီး CRUD flow တစ်ခုလုံးကို ကိုယ်တိုင်ရေးရပါမယ်။ Real project မှာ database မတပ်ခင် logic ကို ဒီလိုသေချာစမ်းသပ်ထားရင် နောက်ပိုင်း database ချိတ်ရတာ ပိုလွယ်ကူသွားပါလိမ့်မယ်။ Task တစ်ခုချင်းစီကို Postman ဒါမှမဟုတ် browser ကနေ request ပို့ပြီး result ကို confirm လုပ်ပါ။
လေ့ကျင့်ခန်းများ
Task 1: Express app တစ်ခုတည်ဆောက်ပြီး in-memory array 'books' (id, title, author) ကို GET /books route နဲ့ ပြန်ပေးပါ။ Task 2: GET /books/:id route ထည့်ပြီး id နဲ့ book မတွေ့ရင် status 404 နဲ့ error message ပြန်ပေးပါ။ Task 3: POST /books route ဖန်တီးပြီး express.json() middleware သုံးကာ request body ကနေ book အသစ်တစ်ခု array ထဲ push လုပ်ပါ - id ကို auto-increment ဖြစ်အောင် ရေးပါ။ Task 4: setTimeout ကို Promise နဲ့ wrap ထားတဲ့ delay() helper function တစ်ခုရေးပြီး, async/await သုံးကာ GET /books/:id route ထဲမှာ 'database ကနေရှာနေသလို' 500ms delay ထည့်ကြည့်ပါ။
Code နမူနာ
const express = require('express');
const app = express();
app.use(express.json());
let books = [
{ id: 1, title: 'Node.js Basics', author: 'Aung' },
{ id: 2, title: 'Express Guide', author: 'Su' }
];
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
// Task 1
app.get('/books', (req, res) => {
res.json(books);
});
// Task 2 + 4: param + async delay
app.get('/books/:id', async (req, res) => {
await delay(500); // simulate database lookup
const book = books.find((b) => b.id === Number(req.params.id));
if (!book) {
return res.status(404).json({ error: 'Book not found' });
}
res.json(book);
});
// Task 3
app.post('/books', (req, res) => {
const { title, author } = req.body;
if (!title || !author) {
return res.status(400).json({ error: 'title and author required' });
}
const newBook = { id: books.length + 1, title, author };
books.push(newBook);
res.status(201).json(newBook);
});
app.listen(3000, () => console.log('API running on port 3000'));GET /books က book list ကို JSON array အနေနဲ့ ပြန်ပေးပြီး, GET /books/:id က 500ms စောင့်ပြီးမှ book တစ်ခုချင်း (ဒါမှမဟုတ် 404) ပြန်ပေးကာ, POST /books ဖြင့် body ပို့ရင် array ထဲကို book အသစ် ထပ်ထည့်ပါလိမ့်မယ်။၅ မိနစ် စမ်းကြည့်
5 minute အတွင်း DELETE /books/:id route အသစ်တစ်ခု ထပ်ရေးပြီး, array.filter() သုံးကာ id နဲ့ book ကို array ထဲကနေ ဖယ်ထုတ်နိုင်အောင် စမ်းကြည့်ပါ။
သတိလေးတစ်ချက်
async route handler ထဲမှာ error တက်နိုင်တဲ့ code ကို try/catch နဲ့ ဖုံးမထားရင် server crash ဖြစ်နိုင်ပါတယ် - production မှာဆို error-handling middleware တစ်ခုနဲ့အတူ တွဲသုံးပါ။