Express.js में res.send और res.json के बीच अंतर


200

जैसा कि दोनों के बीच वास्तविक अंतर है res.sendऔर res.jsonग्राहक के जवाब का एक ही संचालन करता है।


73
इस बात पर ध्यान दें कि उत्तर पोस्ट करने वाले लोग कैसे सिर्फ जीथब पर गए और स्रोत कोड पढ़ें। यह सीखने और स्थापित करने के लिए एक अच्छी आदत है। सत्य स्रोत में निहित है।
पीटर लियोन

31
@PeterLyons मैं मानता हूं कि यह एक अच्छी आदत है, लेकिन क्या आपका मतलब यह है कि राम को सवाल पूछने के बजाय स्रोत को देखना चाहिए था? क्या यह इस साइट के उद्देश्य को नहीं हराता है? इस प्रश्न की उपस्थिति, एक अच्छे स्रोत (स्रोत!) के संदर्भ में उत्तर के साथ उपयोगी है।
लीनुस

3
हाँ, एक आदमी को मछली और सब सिखाओ।
पीटर लियोन

71
जब हमें "RTFS" कहा जाता है (स्रोत पढ़ें) तो इसका वास्तव में मतलब है कि डॉक्स संवाद करने में विफल हैं कि उन्हें क्या करना चाहिए। हां, स्रोत होने से हम इसे जांच सकते हैं, लेकिन अस्पष्ट मामलों को छोड़कर किसी को भी इसे प्राप्त करने की आवश्यकता नहीं है। ये सभी एक्सप्रेस सुविधाएँ वास्तव में बहुत अच्छी हैं, लेकिन डॉक्स बहुत कम हैं। एसओ एक्सप्रेस चीजों के बारे में सवालों से भरा है जो लोग डॉक्स से समझ नहीं सकते हैं (मेरे साथ होता है)।
जुआन लानुस

3
कभी-कभी पठन स्रोत पर्याप्त नहीं होता है और जैसे-जैसे उत्तर से एक अच्छी व्याख्या उत्पन्न हो सकती है, इससे शामिल अवधारणा की सर्वोत्तम समझ सुनिश्चित होगी। कुछ लोग बस स्रोत पढ़ेंगे और समझेंगे, लेकिन उन शुरुआती लोगों के बारे में क्या जो जरूरी नहीं कि जावास्क्रिप्ट के अनुकूल हों? इसके बारे में सोचो।
cram2208

जवाबों:


210

जब वस्तु या सरणी पास हो जाती है तो विधियां समान होती हैं, लेकिन res.json()गैर-ऑब्जेक्ट्स, जैसे nullऔर undefined, जो मान्य JSON नहीं हैं, को भी रूपांतरित करेंगी ।

विधि भी json replacerऔर json spacesअनुप्रयोग सेटिंग्स का उपयोग करती है , इसलिए आप JSON को अधिक विकल्पों के साथ प्रारूपित कर सकते हैं। वे विकल्प इस प्रकार सेट होते हैं:

app.set('json spaces', 2);
app.set('json replacer', replacer);

और इस JSON.stringify()तरह से पास हुआ:

JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation

यह उस res.json()विधि का कोड है जिसमें भेजने की विधि नहीं है:

var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);

विधि अंत में एक के रूप res.send()में समाप्त होती है:

this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');

return this.send(body);

66

https://github.com/visionmedia/express/blob/ee228f7aea6448cf85cc052697f8d831dce785d5/lib/response.js#L174

res.jsonअंततः कॉल करता है res.send, लेकिन इससे पहले:

  • json spacesऔर json replacerएप्लिकेशन सेटिंग्स का सम्मान करता है
  • सुनिश्चित करता है कि प्रतिक्रिया utf8 charset और एप्लिकेशन / json सामग्री-प्रकार होगी

16

भेजे गए हेडर में देख रहे हैं ...
res.send सामग्री-प्रकार का उपयोग करता है: पाठ / html
res.json सामग्री-प्रकार का उपयोग करता है: आवेदन / ईमेल


0

res.jsonJSON के तर्क को बल देता है। res.sendएक गैर- json ऑब्जेक्ट या सरणी ले जाएगा और दूसरा प्रकार भेजेगा। उदाहरण के लिए:

यह एक JSON नंबर लौटाएगा।

res.json(100)

यह एक स्थिति कोड लौटाएगा और सेंडस्टैटस का उपयोग करने के लिए चेतावनी जारी करेगा।

res.send(100)

यदि आपका तर्क JSON ऑब्जेक्ट या सरणी (अशक्त, अपरिभाषित, बूलियन, स्ट्रिंग) नहीं है, और आप यह सुनिश्चित करना चाहते हैं कि इसे JSON, उपयोग के रूप में भेजा गया है res.json

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