ฉันเป็นมือใหม่Express.js
และฉันสับสนกับคำหลักสองคำนี้: res.end()
และres.send()
.
เหมือนหรือต่างกันอย่างไร
ฉันเป็นมือใหม่Express.js
และฉันสับสนกับคำหลักสองคำนี้: res.end()
และres.send()
.
เหมือนหรือต่างกันอย่างไร
คำตอบ:
res.send()
จะส่งการตอบกลับ HTTP ไวยากรณ์ของมันคือ
res.send([body])
พารามิเตอร์ body สามารถเป็นวัตถุ Buffer, String, วัตถุหรือ Array ตัวอย่างเช่น:
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });
ดูนี้สำหรับข้อมูลเพิ่มเติม
res.end()
จะสิ้นสุดกระบวนการตอบกลับ วิธีนี้มาจาก Node core โดยเฉพาะresponse.end()
วิธีการhttp.ServerResponse
. ใช้เพื่อยุติการตอบสนองอย่างรวดเร็วโดยไม่มีข้อมูลใด ๆ ตัวอย่างเช่น:
res.end();
res.status(404).end();
อ่านนี้สำหรับข้อมูลเพิ่มเติม
express
แต่จากชื่อเรื่อง - มีคนส่งบางอย่างคนหนึ่งจบอะไรบางอย่าง .... 'ใช่แล้ว
res.send()
โดยไม่มีอะไรเลย การกระทำเช่นนี้res.end()
หรือไม่?
ฉันต้องการให้ความสำคัญอีกเล็กน้อยเกี่ยวกับความแตกต่างที่สำคัญบางประการระหว่างres.end()
& res.send()
เกี่ยวกับส่วนหัวการตอบกลับและเหตุใดจึงมีความสำคัญ
1. res.send () จะตรวจสอบโครงสร้างของผลลัพธ์ของคุณและตั้งค่าข้อมูลส่วนหัวตามนั้น
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
app.get('/',(req,res)=>{
res.send({msg:'hello'});
});
โดยที่ res.end () คุณสามารถตอบกลับด้วยข้อความเท่านั้นและจะไม่ตั้งค่า " Content-Type "
app.get('/',(req,res)=>{
res.end('<b>hello</b>');
});
2. res.send () จะตั้งค่าแอตทริบิวต์ "ETag" ในส่วนหัวการตอบกลับ
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
¿แท็กนี้สำคัญไฉน?
ส่วนหัวการตอบกลับ ETag HTTP เป็นตัวระบุสำหรับเวอร์ชันเฉพาะของทรัพยากร ช่วยให้แคชมีประสิทธิภาพมากขึ้นและประหยัดแบนด์วิดท์เนื่องจากเว็บเซิร์ฟเวอร์ไม่จำเป็นต้องส่งการตอบสนองทั้งหมดหากเนื้อหาไม่มีการเปลี่ยนแปลง
res.end()
จะไม่ตั้งค่าแอตทริบิวต์ส่วนหัวนี้
สิ่ง res.send () ไม่เป็นในการดำเนินการres.write , res.setHeadersและres.end
ตรวจสอบว่าคุณส่งข้อมูลอะไรและตั้งค่าส่วนหัวที่ถูกต้อง
จากนั้นสตรีมข้อมูลด้วย res.write และในที่สุดก็ใช้ res.end เพื่อกำหนดจุดสิ้นสุดของคำขอ
มีบางกรณีที่คุณต้องการทำด้วยตนเองเช่นหากคุณต้องการสตรีมไฟล์หรือชุดข้อมูลขนาดใหญ่ในกรณีนี้คุณจะต้องตั้งค่าส่วนหัวด้วยตัวคุณเองและใช้ res.write เพื่อให้สตรีม ไหล.
res
เป็นอ็อบเจ็กต์ HttpResponse ซึ่งขยายจาก OutgoingMessage res.send
การโทรres.end
ที่ใช้งานโดย OutgoingMessage เพื่อส่งการตอบสนอง HTTP และปิดการเชื่อมต่อ เราเห็นรหัสที่นี่
res.end
ใช้โดยโหนดธรรมดาที่res.send
ใช้โดย