नोड-अतिरंजित प्रतिक्रिया टाइप ('बूँद') बनाम बफर (सत्य)

वोट
0

की निंदा के कारण अनुरोध , हम वर्तमान में superagent के साथ हमारे नोड अनुप्रयोग में अनुरोध-सेवा को फिर से लिखने जा रहे हैं। अब तक सब ठीक लग रहा है, हालांकि हम बाइनरी डेटा / ऑक्टेट-स्ट्रीम का अनुरोध करने और वास्तविक प्रतिक्रिया निकाय को संसाधित करने के तरीके के बारे में निश्चित नहीं हैं Bufferडॉक्स के अनुसार (क्लाइंट की तरफ) एक का उपयोग करना चाहिए

superAgentRequest.responseType('blob');

जो NodeJS पर ठीक काम करने के लिए लगता है, लेकिन मैं भी इस github मुद्दा पाया है जहाँ वे उपयोग करते हैं

superAgentRequest.buffer(true);

जो भी काम करता है। इसलिए मैं सोच रहा हूं कि NodeJS में बाइनरी डेटा का अनुरोध करने का पसंदीदा तरीका क्या है?

22/05/2020 को 16:51
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
0

प्रलेखन के अनुसार https://visionmedia.github.io/superagent/

सुपरएजेंट आपके लिए ज्ञात प्रतिक्रिया-निकाय डेटा को पार्स करेगा, वर्तमान में एप्लिकेशन / x-www-form-urlencoded , एप्लिकेशन / json और मल्टीपार्ट / फॉर्म-डेटा का समर्थन कर रहा है। आप अन्य प्रतिक्रिया-शरीर डेटा के लिए भी स्वचालित पार्सिंग सेटअप कर सकते हैं:

आप .buffer (सच) .parse (fn) विधि के साथ एक कस्टम पार्सर (जो अंतर्निहित पार्सरों पर पूर्वता लेता है) सेट कर सकते हैं। यदि प्रतिसाद बफ़रिंग सक्षम नहीं है (.buffer (झूठी)) तो बॉडी पार्सर के समाप्त होने की प्रतीक्षा किए बिना प्रतिक्रिया ईवेंट उत्सर्जित किया जाएगा, इसलिए प्रतिक्रिया। कोई भी उपलब्ध नहीं होगा।

तो अन्य प्रतिक्रिया प्रकारों को पार्स करने के लिए, आपको सेट करने की आवश्यकता होगी .buffer(true).parse(fn) । लेकिन अगर आप प्रतिक्रिया को पार्स नहीं करना चाहते हैं तो सेट करने की कोई आवश्यकता नहीं है buffer(true)

30/05/2020 को 00:35
का स्रोत उपयोगकर्ता

वोट
0

Superagent के सोर्स-कोड के अनुसार , सोर्स को सेट करना responseType सेट करता है buffer ध्वज को सही, अर्थात इसे मैन्युअल रूप से सेट करने के समान true

बाइनरी-डेटा / ऑक्टेट-धाराओं से निपटने के मामले में, एक बाइनरी डेटा पार्सर का उपयोग किया जाता है, जो वास्तव में एक साधारण डेटा है:

module.exports = (res, fn) => {
  const data = []; // Binary data needs binary storage

  res.on('data', chunk => {
    data.push(chunk);
  });
  res.on('end', () => {
    fn(null, Buffer.concat(data));
  });
};

दोनों मामलों में इस पार्सर का उपयोग किया जाता है, जो व्यवहार की व्याख्या करता है। तो यह वास्तव में कोई फर्क नहीं पड़ता कि आप बाइनरी डेटा / ऑक्टेट-स्ट्रीम से निपटने के लिए क्या उपयोग करते हैं।

03/06/2020 को 15:59
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more