Res.end () और res.send () के बीच अंतर क्या है?


141

मैं एक शुरुआत में Express.jsहूं और मैं इन दो खोजशब्दों द्वारा भ्रमित हूँ: res.end()और res.send()

क्या वे एक ही हैं या अलग हैं?


1
मुझे लगता res.endहै कि सादा नोड द्वारा उपयोग किया जाता है, जहां res.sendएक्सप्रेस
फ्रैमवर्क

जवाबों:


130

res.send()HTTP प्रतिसाद भेजेंगे। इसका सिंटैक्स है,

res.send([body])

बॉडी पैरामीटर एक बफर ऑब्जेक्ट, एक स्ट्रिंग, एक ऑब्जेक्ट या एक ऐरे हो सकता है। उदाहरण के लिए:

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()प्रतिक्रिया प्रक्रिया को समाप्त करेगा। यह विधि वास्तव में नोड कोर से आती है, विशेष रूप से की response.end()विधि http.ServerResponse। इसका उपयोग बिना किसी डेटा के प्रतिक्रिया को जल्दी समाप्त करने के लिए किया जाता है। उदाहरण के लिए:

res.end();
res.status(404).end();

अधिक जानकारी के लिए इसे पढ़ें ।


68
लेकिन res.end वास्तव में res.send की तरह कार्य कर सकता है, जिसमें आप प्रतिक्रिया निकाय के रूप में जोड़ने के लिए एक स्ट्रिंग तर्क पारित कर सकते हैं। उसके ऊपर, res.send भी प्रतिक्रिया को समाप्त करता है। तो वे कार्यात्मक रूप से अलग कैसे हैं?
साल्टलेश

31
@ psytech140 Jmar77 की यहां अच्छी प्रतिक्रिया थी : "यदि आप res.send () को स्ट्रिंग पास करते हैं, तो यह स्वचालित रूप से HTML का एक कंटेंट-प्रकार मानता है। res.end (), हालांकि, केवल नोड के अंतर्निहित अंत () कार्यान्वयन को कॉल करता है। प्रतिक्रिया स्ट्रीम, इसलिए सामग्री-प्रकार के लिए कोई धारणा नहीं बनाई गई है। "
abagh0703

इस शुद्ध रूप से उत्थान करना था क्योंकि मैंने कभी उपयोग नहीं किया expressलेकिन शीर्षक से सोचा - कोई कुछ भेजता है, कोई कुछ समाप्त करता है .... 'ठीक है।
डैरेन बार्ट्रुप-कुक

लेकिन क्या होगा अगर आप सिर्फ res.send()कुछ नहीं के साथ उपयोग करें । क्या यह अधिनियम पसंद करता है res.end()?
CMCDragonkai


108

मैं बीच कुछ मुख्य अंतर पर थोड़ा और अधिक जोर करना चाहते हैं 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 () के साथ आप केवल पाठ के साथ उत्तर दे सकते हैं और यह " सामग्री-प्रकार " सेट नहीं करेगा

      app.get('/',(req,res)=>{
           res.end('<b>hello</b>');
      }); 

यहां छवि विवरण दर्ज करें

2. res.send () प्रतिक्रिया शीर्षक में "ETag" विशेषता सेट करेगा

      app.get('/',(req,res)=>{
            res.send('<b>hello</b>');
      });

यहां छवि विवरण दर्ज करें

Tag यह टैग महत्वपूर्ण क्यों है?
ETag HTTP प्रतिक्रिया हेडर एक संसाधन के विशिष्ट संस्करण के लिए एक पहचानकर्ता है। यह कैश को अधिक कुशल बनाने की अनुमति देता है, और बैंडविड्थ को बचाता है, क्योंकि वेब सर्वर को सामग्री को नहीं बदलने पर पूर्ण प्रतिक्रिया भेजने की आवश्यकता नहीं है।

res.end() इस शीर्ष लेख विशेषता को सेट नहीं किया जाएगा


4
यह मेरी राय में जवाब स्वीकार किया जाएगा ... अधिक एम्फ़ैसिस वास्तविक अंतर पर बनाया गया है जो आपके कार्य दिवस को सामग्री के साथ / बिना प्रतिक्रिया समाप्त करने पर चर्चा के बजाय बर्बाद कर सकता है ...
टॉमस

13

res.send () क्या करता है, res.write , res.setHeaders और res.end लागू करना है
यह जाँच करें कि आप क्या डेटा भेजते हैं और सही हेडर सेट करते हैं,

फिर इसके डेटा को res.write के साथ स्ट्रीम करें, और अंत में यह अनुरोध के अंत को सेट करने के लिए res.end का उपयोग करता है।

कुछ मामले हैं जो आप इसे स्वयं करना चाहते हैं उदाहरण के लिए यदि आप स्ट्रीम फ़ाइल या एक बड़ा डेटा सेट चाहते हैं, तो इस मामले में आप स्वयं द्वारा हेडर सेट करना चाहते हैं और स्ट्रीम रखने के लिए res.write का उपयोग करेंगे। बहे।


0

resएक HttpResponse वस्तु है जो आउटगोइंगमेज़ेज से निकलती है। HTTP पर प्रतिक्रिया और नजदीकी कनेक्शन भेजने के लिए आउटगोइंगमेसेज द्वारा लागू की जाने वाली res.sendकॉल res.end। हम यहां कोड देखते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.