กลับไปหน้าบทความ
#Express#API#Node.js#Backend

แยก req.params, req.query และ req.body ใน Express ให้ถูกหน้าที่

เลือกช่องทางรับข้อมูลตามความหมายของ URL การกรอง และ payload พร้อม validate ทุกจุด เพื่อให้ API อ่านง่ายและลดความสับสนระหว่าง frontend กับ backend

10 กรกฎาคม 2569อ่านประมาณ 1 นาที

แชร์บทความ

แยก req.params, req.query และ req.body ใน Express ให้ถูกหน้าที่

ภาพรวม

req.params, req.query, req.body คือคนละช่องทางของข้อมูล 📦

Express รับข้อมูลจาก request ได้หลายที่ แต่ละที่มีความหมายต่างกัน ถ้าใช้ปนกัน API จะอ่านยากและ frontend เดาไม่ออก

req.params มาจาก path parameter เหมาะกับข้อมูลที่เป็นตัวระบุ resource เช่น /users/:id หรือ /orders/:orderId

app.get("/users/:id", (req, res) => { console.log(req.params.id) })

req.query มาจาก query string หลังเครื่องหมาย ? เหมาะกับ filter, sort, pagination เช่น /users?page=2&role=admin

app.get("/users", (req, res) => { console.log(req.query.page) })

req.body คือข้อมูลใน body ของ request ใช้กับ POST, PUT, PATCH เช่นชื่อผู้ใช้ email password หรือ payload ตอนสร้างข้อมูล

app.post("/users", (req, res) => { console.log(req.body.email) })

ก่อนอ่าน req.body ต้องมี middleware parse body เช่น app.use(express.json()) ไม่งั้น body อาจเป็น undefined หรืออ่านไม่ได้ตามที่คาด

วิธีจำง่าย ๆ params = ชี้ว่ากำลังพูดถึง resource ไหน query = ปรับวิธีค้นหาหรือแสดงผล body = ส่งข้อมูลหลักเพื่อสร้างหรือแก้

อย่าใส่ข้อมูลลับใน query เพราะ URL อาจไปอยู่ใน log, browser history หรือ analytics token และ password ไม่ควรโผล่ใน query string

ถ้า API ออกแบบดี คนอ่าน URL ก็พอเดา intent ได้ และ backend ก็ validate แต่ละช่องทางได้ชัดขึ้น 🔎

แนวทางนำไปใช้

  • นำแนวคิดจากโพสต์นี้ไปทดลองกับงานจริงของคุณ
  • แยกเป็นขั้นตอนเล็ก ๆ แล้วทำทีละส่วน
  • บันทึกผลลัพธ์และสิ่งที่เรียนรู้เพื่อต่อยอด

สรุป

เลือกช่องทางรับข้อมูลตามความหมายของ URL การกรอง และ payload พร้อม validate ทุกจุด เพื่อให้ API อ่านง่ายและลดความสับสนระหว่าง frontend กับ backend