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

hlasů
0

Z důvodu zastarání žádosti v současné době přepisujeme službu request v naší uzlové aplikaci superagentem. Zatím vše vypadá dobře, ale nejsme si zcela jisti, jak požádat o binární data / oktetový proud a zpracovat skutečné tělo odpovědi jako Buffer . Podle dokumentů (na straně klienta) je třeba použít

superAgentRequest.responseType('blob');

který vypadá, že funguje dobře na NodeJS, ale také jsem našel tento problém s githubem, kde používají

superAgentRequest.buffer(true);

který funguje stejně dobře. Tak jsem přemýšlel, jaká je preferovaná metoda vyžadování binárních dat v NodeJS?

Položena 22/05/2020 v 16:51
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Podle dokumentace https://visionmedia.github.io/superagent/

SuperAgent pro vás analyzuje známá data odpovědí, aktuálně podporující data aplikace / x-www-form-urlencoded , application / json a multipart / form-data . Můžete také nastavit automatickou analýzu dalších dat těla odpovědí:

Vlastní syntaktický analyzátor (který má přednost před vestavěnými analyzátory) můžete nastavit pomocí metody .buffer (true) .parse (fn). Pokud není povoleno ukládání do vyrovnávací paměti odezvy (.buffer (false)), bude odezva vyvolána bez čekání na dokončení analyzátoru těla, takže response.body nebudou k dispozici.

Chcete-li analyzovat další typy odpovědí, budete muset nastavit .buffer(true).parse(fn) . Pokud však nechcete analyzovat odpověď, není třeba ji nastavovat buffer(true) .

Odpovězeno 30/05/2020 v 00:35
zdroj uživatelem

hlasů
0

Podle zdrojového kódu superagentu nastavení responseType nastaví buffer flag to true, tj. stejné jako ruční nastavení true .

V případě řešení toků binárních dat / oktetů se používá analyzátor binárních dat , což je ve skutečnosti pouze jednoduchá vyrovnávací paměť :

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

V obou případech se použije tento analyzátor, což vysvětluje chování. Takže nezáleží na tom, co používáte k řešení binárních dat / proudů oktetů.

Odpovězeno 03/06/2020 v 15:59
zdroj uživatelem

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