ต้องเรียก res.end () ด้วย node.js?


92

ฉันมีแอปพลิเคชั่นExpressหลายตัวและฉันเห็นว่าในบางโมดูลres.end()ถูกเรียกที่ส่วนท้ายของตัวจัดการคำขอ (หลังres.sendหรือres.json) ในขณะที่อื่น ๆ จะไม่ถูกเรียก

ตัวอย่างเช่น:

app.get('/test', function(req, res) {
    res.send('Test', 200);
});

หรือ:

app.get('/test', function(req, res) {
    res.send('Test', 200);
    res.end();
});

ทั้งสองกรณีใช้ได้ผล แต่ฉันกลัวว่าจะรั่วหรือใช้ตัวอธิบายไฟล์หรืออะไรทำนองนั้นเมื่อฉันเรียกใช้คำขอจำนวนมาก ข้อใด "ถูกต้อง" มากกว่ากัน?


2
ฉันคิดว่าres.send()ถูกกระตุ้นres.end()- อาจจะผิดก็ได้
tymeJV

3
@tymeJV คุณพูดถูกมัน: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQ

ขอบคุณ @ Trevor-Senior ฉันกำลังมองหาไฟล์นั้นเหมือนกัน แต่ฉันไม่เห็นมัน ...
greuze

@greuze ฉันได้ค้นพบมาก่อนดังนั้นฉันจึงเริ่มต้นได้ :) ฉันดำเนินการต่อและย้ายความคิดเห็นไปเป็นคำตอบที่มีโครงสร้างมากขึ้นสำหรับผู้อื่น
JayQ

สวัสดี. แล้ว res.status (<any>) .json (); และฉันยังมีคำถามอื่นอีก ฉันควรส่งรหัสข้อผิดพลาดใดกลับมาหากฉันปฏิเสธสายนั้น เช่นผู้ใช้เกินขีด จำกัด ของเขา?
9 มี.ค.

คำตอบ:


121

คำตอบสำหรับคำถามของคุณคือไม่ คุณไม่ต้องโทรถ้าคุณโทรres.end() เรียกหาคุณres.send()res.send()res.end()

นำมาจาก/lib/response.jsนี่คือจุดสิ้นสุดของres.send()ฟังก์ชัน:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}

4
บางทีความทรงจำของฉันอาจจะดีขึ้นในที่สุด :)
tymeJV


5

res.end([data] [, encoding])

สิ้นสุดกระบวนการตอบกลับ วิธีนี้มาจากNode coreโดยเฉพาะการresponse.end() method of http.ServerResponse. ใช้เพื่อยุติการตอบสนองอย่างรวดเร็วโดยไม่มีข้อมูลใด ๆ

หากคุณต้องการตอบสนองด้วยข้อมูลให้ใช้วิธีการเช่น res.send() and res.json().

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.