Back to notes
mastery-backend-express
Featured

Node.js & Express: หัวใจหลักของ Backend ยุคใหม่

เข้าใจจุดเด่นของ Node.js และกลไกของ Express Middleware ผ่านการเปรียบเทียบกับชีวิตประจำวัน

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: เตาเดียวที่รับออเดอร์ไม่ทัน

ลองนึกภาพว่าคุณเขียน Backend ด้วยภาษาแบบดั้งเดิมที่ทำงานแบบ Synchronous (รอจนกว่าจะเสร็จ):

HLJS JAVASCRIPT
// ❌ Naive Approach: รอจนกว่าจะต้มซุปเสร็จถึงจะรับออเดอร์ใหม่ได้
const soup = cookSoup(); // 🌋 หยุดรอตรงนี้ 10 วินาที
const steak = cookSteak();
res.send({ soup, steak });

ปัญหา: ในโลกของความเป็นจริง ถ้าเชฟมัวแต่ยืนจ้องหม้อซุปโดยไม่ทำอย่างอื่น พนักงานคนอื่นและลูกค้าคนถัดไปต้องยืนรอขาแข็ง! ถ้ามีลูกค้าเข้ามา 100 คนพร้อมกัน ร้านคุณจะล่มสลายทันที นี่คือสาเหตุที่เราต้องการ Node.js ที่เป็นระบบ "รับออเดอร์แล้วไปทำอย่างอื่นต่อ" (Non-blocking I/O) ครับ


💡 2. Real-Life Analogy: เชฟมือไวกับกริ่งเรียกอัจฉริยะ

ลองนึกภาพว่า Node.js คือ "เชฟที่ทำงานเร็วมากแต่มีมือเดียว".

  • Event Loop: คือเชฟคนนี้ เขาจะไม่ยืนเฝ้าหม้อซุป แต่เขาจะตั้งเวลาไว้ว่า "ถ้าซุปเดือดแล้วให้กริ่งดังนะ" (Callbacks) แล้วเขาก็เดินไปรับออเดอร์ลูกค้าคนใหม่ทันที
  • Express: คือ "ระเบียบการจัดร้าน". มันทำหน้าที่บอกว่า ใครเดินเข้าประตูไหนต้องไปหาใคร (Routing) เช่น ถ้าลูกค้าอยากกินของหวาน (Method: GET /dessert) พนักงานต้อนรับ (Express) จะพาไปส่งที่โต๊ะที่ถูกต้อง
  • Middleware: คือ "รปภ. ประจำร้าน". ก่อนจะถึงมือเชฟ รปภ. จะขอตรวจบัตรประชาชน (Auth) และตรวจกระเป๋าว่าพกอาวุธมาไหม (Validation)

🚀 3. Execution Journey: มหากาพย์การเดินทางของข้อมูล

เมื่อลูกค้าส่งคำสั่งซื้อ (Request) มาที่ร้าน นี่คือสิ่งที่เกิดขึ้นหลังบ้าน:

🛠 Step-by-step:

  1. Request Entry: ข้อมูลวิ่งเข้ามาหา Express
  2. Middleware Wall: ผ่านด่านตรวจ (Logger, Body Parser, Auth)
  3. Route Matching: Express มองหา "เชฟ" ที่ทำอาหารจานนี้เป็น
  4. Service/Logic: เชฟประมวลผล (สั่งต้มซุป ยิง API ไปถามร้านอื่น)
  5. Response Out: เมื่ออาหารเสร็จ ก็ส่งกลับให้ลูกค้า (Response)
HLJS JAVASCRIPT
// ✅ Best Practice: โครงสร้างที่แยกสัดส่วนชัดเจน
app.get("/api/orders", protectedRoute, async (req, res) => {
  try {
    const orders = await orderService.getAll(req.user.id); // 🛠 ส่งงานให้ Service ทำ
    res.json(orders);
  } catch (err) {
    next(err); // 🛠 ถ้าพัง ส่งให้ Error Middleware จัดการ
  }
});

🪤 4. The Junior Trap: โรค "Middleware ลืม next()"

จูเนียร์มักจะเขียนด่านตรวจที่ "ขังผู้ใช้ไว้ตลอดกาล":

HLJS JAVASCRIPT
// ❌ Junior Trap: ลืมสั่งให้ไปต่อ
app.use((req, res, next) => {
  console.log("มีคนมาหน้าบ้าน!");
  // ... ลืมเรียก next()
});
// 🌋 พัง! ผู้ใช้จะเห็นหน้าจอขาวๆ หมุนติ้วๆ เพราะไม่มีใครบอกให้ Express เดินไปด่านถัดไป

ระวัง: Middleware ทุกตัวที่ไม่ได้ทำหน้าที่ "จบงาน" (res.send) ต้องเรียก next() เสมอ เพื่อส่งไม้ต่อให้ทีมงานคนอื่น ✅ การแก้ไข: ตรวจสอบ Flow ของเงื่อนไข if-else ให้ดีว่าทุกเส้นทางมีการสั่งให้ไปต่อหรือสั่งปิดงาน


⚖️ 5. The Why Matrix: ทำไมต้อง Express?

หัวข้อNode.js ดิบๆ (HTTP Module)Express Framework
ความเร็วในการเขียน🐢 ช้า ต้องเขียน Logic เองทุกอย่าง⚡⚡⚡ เร็วมาก มี Plugin ครบ
การจัดการ Routeต้องเช็ค req.url ด้วยมือ🚀 สวยงาม แบ่งเป็นไฟล์ย่อยได้ง่าย
ชุมชน (Community)เหงา (ต้องเป็นเซียนจริงๆ)⚡⚡⚡ ใหญ่มาก มีคำตอบทุุกปัญหาบนโลก

🎓 6. Senior Mindset Summary

การเป็น Senior คือการมองว่า "Backend ไม่ใช่แค่โค้ดที่รันได้ แต่คือระบบท่อส่งข้อมูลที่ลื่นไหล". หน้าที่ของคุณคือการออกแบบเส้นทาง (Routing) และด่านตรวจ (Middleware) ให้แข็งแรงที่สุด เพื่อให้ธุรกิจเดินหน้าไปได้อย่างมั่นคงโดยไม่ต้องมีใครมาคอยแก้บั๊กตอนตี 2 ครับ!

Share this note

© 2026 My Notes by Seereen