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

stemmen
0

Vanwege de deprecatie van de aanvraag, zijn we op dit moment bezig met het herschrijven van de aanvraag-service in onze node-app met superagent. Tot nu toe ziet alles er goed uit, maar we weten niet zeker hoe we binaire data/octet-stream moeten aanvragen en hoe we de eigenlijke responsinstantie moeten verwerken als eenBuffer. Volgens de docs (aan de klantzijde) zou men gebruik moeten maken van

superAgentRequest.responseType('blob');

die goed lijkt te werken op NodeJS, maar ik heb ook deze github kwestie gevonden waar ze gebruik maken van

superAgentRequest.buffer(true);

wat net zo goed werkt. Dus ik vraag me af wat de voorkeursmethode is om binaire gegevens op te vragen in NodeJS?

De vraag is gesteld op 22/05/2020 om 16:51
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Volgens de documentatie https://visionmedia.github.io/superagent/

SuperAgent zal bekende response-body gegevens voor u ontleden, die momenteel applicatie/x-www-form-urlencoded, applicatie/json, en multipart/form-data ondersteunen. U kunt ook automatische parsing voor andere responslichaamsgegevens instellen:

U kunt een aangepaste parser (die voorrang heeft op ingebouwde parsers) instellen met de .buffer(true).parse(fn) methode. Als response buffering niet is ingeschakeld (.buffer(false)) dan zal de response event worden uitgezonden zonder te wachten tot de body parser klaar is, dus response.body zal niet beschikbaar zijn.

Dus om andere responstypes te parseren, moet je instellen.buffer(true).parse(fn). Maar als u geen antwoord wilt parseren dan hoeft u dat niet in te stellenbuffer(true).

antwoordde op 30/05/2020 om 00:35
bron van user

stemmen
0

Volgens de broncode van de superagent responseTypestelt het instellen van de buffervlag op waar, dat wil zeggen hetzelfde als het handmatig instellen op true.

In het geval van het omgaan met binaire data/octet-streams wordt een binaire dataparser gebruikt, wat in feite slechts een eenvoudige buffer is:

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

In beide gevallen wordt deze parser gebruikt, wat het gedrag verklaart. Het maakt dus niet echt uit wat je gebruikt om met binaire data/octet-streams om te gaan.

antwoordde op 03/06/2020 om 15:59
bron van user

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