เมื่อแอปพลิเคชัน Express รับคำขอ HTTP จะสร้างอ็อบเจกต์ res (Response) ให้เพื่อส่งตอบกลับไคลเอนต์
app.get('/test', (req, res) => {
// ใช้ req และ res ที่นี่
});
res.send()
- ตั้งค่า Content-Type: text/html (ค่าเริ่มต้น)
- ไคลเอนต์จะถือว่าเป็นข้อความ/HTML
- รองรับหลายชนิดข้อมูล: String, Buffer, Object, Array (จะทำ JSON.stringify ให้อัตโนมัติสำหรับ Object/Array)
- ส่ง response และจบการทำงาน
res.json()
- ตั้งค่า Content-Type: application/json โดยเฉพาะ
- ไคลเอนต์จะถือว่าเป็น JSON object ที่ถูกต้อง
- ทำ
JSON.stringify()ให้อัตโนมัติเสมอ - ส่ง response และจบการทำงาน
ตารางเปรียบเทียบ
| คุณสมบัติ | res.send() | res.json() |
|---|---|---|
| Content-Type เริ่มต้น | text/html | application/json |
| รองรับ Object/Array | ใช่ (auto stringify) | ใช่ (auto stringify) |
| เจตนาที่ชัดเจน (Explicit) | ส่งข้อมูลทั่วไป | ส่ง JSON โดยเฉพาะ |
| เหมาะสำหรับ | HTML, Plain text, Buffer | REST API, JSON Response |
ตัวอย่างการใช้งาน
app.get('/api/users', (req, res) => {
const users = [{name: 'John'}, {name: 'Jane'}];
// ✅ แนะนำสำหรับ API - ชัดเจนว่าเป็น JSON
res.json(users);
// ⚠️ ทำงานได้ แต่ไม่ชัดเจนเจตนา
// res.send(users);
});
app.get('/', (req, res) => {
// ✅ แนะนำสำหรับ HTML
res.send('Welcome
');
// ❌ ไม่เหมาะสม - Content-Type จะเป็น application/json
// res.json('Welcome
');
});
สรุป: ควรใช้ตัวไหน?
- res.json() - สำหรับ REST API และ endpoint ที่ส่ง JSON
- res.send() - สำหรับ HTML, Plain text, Buffer หรือกรณีทั่วไป