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

votos
0

Devido à desvalorização do pedido, estamos atualmente reescrevendo o serviço de pedido no nosso aplicativo de nó com superagente. Até agora tudo parece bem, porém não temos certeza de como solicitar dados binários/octet-stream e processar o corpo de resposta real como um Buffer. De acordo com os documentos (no lado do cliente) deve-se usar

superAgentRequest.responseType('blob');

o que parece funcionar bem no NodeJS, mas também encontrei este problema do github onde eles usam

superAgentRequest.buffer(true);

o que também funciona bem. Então estou me perguntando qual é o método preferido para solicitar dados binários no NodeJS?

Publicado 22/05/2020 em 16:51
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

De acordo com a documentação https://visionmedia.github.io/superagent/

SuperAgent analisará dados conhecidos de resposta-corpo para você, atualmente suportando aplicação/x-www-form-urlencoded, aplicação/json, e dados multipart/form-data. Você pode configurar a análise automática para outros dados de corpo de resposta também:

Você pode definir um analisador personalizado (que tem precedência sobre os analisadores internos) com o método .buffer(true).parse(fn). Se o buffer de resposta não estiver ativado (.buffer(false)) então o evento de resposta será emitido sem esperar que o analisador de corpo termine, então o arquivo response.body não estará disponível.

Então, para analisar outros tipos de resposta, você precisará definir .buffer(true).parse(fn). Mas se você não quiser analisar a resposta, então não há necessidade de definir buffer(true).

Respondeu 30/05/2020 em 00:35
fonte usuário

votos
0

De acordo com o código fonte do superagente, definir a responseTypebufferbandeira como verdadeira, ou seja, o mesmo que defini-la manualmente para true.

No caso de lidar com dados binários/octet-streams, um analisador de dados binário é usado, o que na verdade é apenas um simples 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));
  });
};

Em ambos os casos este analisador é utilizado, o que explica o comportamento. Portanto, não importa realmente o que você usa para lidar com dados binários/octetos.

Respondeu 03/06/2020 em 15:59
fonte usuário

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