node-superagent responseType ('blob') vs. buffer (true)

voturi
0

Datorită depreciei cererii , în prezent rescriem solicitarea-serviciu în aplicația de nod cu superagent. Până în prezent, toate arată bine, cu toate acestea nu suntem deloc siguri cum să solicităm date binare / octet-stream și să procesăm corpul de răspuns real ca Buffer . În conformitate cu documentele (din partea clientului), ar trebui să folosești

superAgentRequest.responseType('blob');

care pare să funcționeze bine la NodeJS, dar am găsit și această problemă de github acolo unde le folosesc

superAgentRequest.buffer(true);

care funcționează la fel de bine. Deci mă întreb care este metoda preferată de a solicita date binare în NodeJS?

Întrebat 22/05/2020 la 16:51
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Conform documentației https://visionmedia.github.io/superagent/

SuperAgent va analiza datele cunoscute ale corpului dvs. de răspuns pentru dvs., care acceptă în prezent aplicația / x-www-form-urlencoded , application / json și multipart / form-data . Puteți configura și analizarea automată pentru alte date despre corpul de răspuns:

Puteți seta un parser personalizat (care are prioritate față de analizatorii încorporați) cu metoda .buffer (true) .parse (fn). Dacă bufferingul de răspuns nu este activat (.buffer (false)), atunci evenimentul de răspuns va fi emis fără a aștepta finalizarea parserului de corp, astfel încât answer.body nu va fi disponibil.

Deci, pentru a analiza alte tipuri de răspuns, va trebui să setați .buffer(true).parse(fn) . Dar dacă nu doriți să analizați răspunsul, nu trebuie să setați buffer(true) .

Publicat 30/05/2020 la 00:35
sursa de către utilizator

voturi
0

Conform codului sursă al superagentului , setarea responseType stabilește buffer semnalizare la adevărat, adică aceeași cu setarea manuală la true .

În cazul în care se ocupă cu fluxurile de date binare / octet, se folosește un analizor de date binare , care este de fapt doar un simplu buffer :

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));
  });
};

În ambele cazuri se folosește acest parser, ceea ce explică comportamentul. Deci nu contează cu adevărat ce folosești pentru a face față datelor binare / octet-fluxurilor.

Publicat 03/06/2020 la 15:59
sursa de către utilizator

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