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

voix
0

En raison de la dépréciation de la demande, nous sommes en train de réécrire le service de demande dans notre application de nœud avec superagent. Jusqu'à présent, tout semble correct, mais nous ne savons pas exactement comment demander un flux de données/octets binaires et comment traiter le corps de la réponse comme un corps de donnéesBuffer. Selon la documentation (côté client), il faut utiliser

superAgentRequest.responseType('blob');

qui semble bien fonctionner sur NodeJS, mais j'ai aussi trouvé ce problème de github où ils utilisent

superAgentRequest.buffer(true);

qui fonctionne tout aussi bien. Je me demande donc quelle est la méthode préférée pour demander des données binaires dans NodeJS ?

Créé 22/05/2020 à 16:51
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Selon la documentation https://visionmedia.github.io/superagent/

SuperAgent analysera pour vous les données des corps de réponse connus, qui prennent actuellement en charge les données de type application/x-www-form-urlencoded, application/json, et multipart/form-data. Vous pouvez également configurer l'analyse automatique pour d'autres données de corps de réponse :

Vous pouvez définir un analyseur personnalisé (qui a la priorité sur les analyseurs intégrés) avec la méthode .buffer(true).parse(fn). Si la mise en mémoire tampon des réponses n'est pas activée (.buffer(false)), l'événement de réponse sera émis sans attendre la fin de l'analyseur de corps, donc le fichier response.body ne sera pas disponible.

Pour analyser les autres types de réponses, vous devrez donc définir .buffer(true).parse(fn). Mais si vous ne voulez pas analyser les réponses, vous n'avez pas besoin de définir buffer(true).

Créé 30/05/2020 à 00:35
source utilisateur

voix
0

Selon le code source du superagent, le fait de régler le responseTypebufferdrapeau sur vrai, c'est-à-dire la même chose que de le régler manuellement sur true.

Dans le cas des flux de données/octets binaires, un analyseur de données binaires est utilisé, qui n'est en fait qu'un simple tampon :

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

Dans les deux cas, cet analyseur est utilisé, ce qui explique le comportement. Il n'est donc pas vraiment important de savoir ce que vous utilisez pour traiter les flux de données/octets binaires.

Créé 03/06/2020 à 15:59
source utilisateur

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