Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ความแตกต่างระหว่าง res.send และ res.json ใน Express.js

เมื่อแอปพลิเคชัน 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/htmlapplication/json
รองรับ Object/Arrayใช่ (auto stringify)ใช่ (auto stringify)
เจตนาที่ชัดเจน (Explicit)ส่งข้อมูลทั่วไปส่ง JSON โดยเฉพาะ
เหมาะสำหรับHTML, Plain text, BufferREST 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 หรือกรณีทั่วไป