ฉันเป็นมือใหม่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ใช้โดย