respuesta nodal-superagenteTipo('blob') vs. buffer(true)

votos
0

Debido a la depreciación de la solicitud, estamos reescribiendo el servicio de solicitud en nuestro nodo de aplicación con superagente. Hasta ahora todo parece bien, sin embargo no estamos muy seguros de cómo solicitar datos binarios/octetos y procesar el cuerpo de respuesta real como un Buffer. Según los documentos (en el lado del cliente) se debe utilizar

superAgentRequest.responseType('blob');

que parece funcionar bien en el NodeJS, pero también he encontrado este problema de github donde usan

superAgentRequest.buffer(true);

que funciona igual de bien. Así que me pregunto cuál es el método preferido para solicitar datos binarios en el NodeJS

Publicado el 22/05/2020 a las 16:51
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Según la documentación https://visionmedia.github.io/superagent/

SuperAgent analizará para usted los datos conocidos del cuerpo de respuesta, que actualmente soportan datos de aplicación/x-www-form-urlencoded, aplicación/json, y multiparte/form. También puede configurar el análisis automático para otros datos del cuerpo de respuesta:

Puedes establecer un analizador personalizado (que tiene prioridad sobre los analizadores incorporados) con el método .buffer(true).parse(fn). Si el buffer de respuesta no está habilitado (.buffer(false)) entonces el evento de respuesta se emitirá sin esperar a que termine el parser del cuerpo, por lo que el cuerpo de respuesta no estará disponible.

Así que para analizar otros tipos de respuesta, tendrás que establecer.buffer(true).parse(fn)... Pero si no quieres analizar la respuesta, entonces no es necesario establecerbuffer(true)...

Respondida el 30/05/2020 a las 00:35
fuente por usuario

votos
0

De acuerdo con el código fuente del superagente, configurar la responseTypebufferbandera a true, es decir, lo mismo que configurarla manualmente a true.

En el caso de tratar con flujos de datos/octetos binarios, se utiliza un analizador de datos binarios, que en realidad es sólo un simple búfer:

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

En ambos casos se utiliza este analizador, lo que explica el comportamiento. Así que realmente no importa lo que se use para tratar con datos binarios/flujos de octetos.

Respondida el 03/06/2020 a las 15:59
fuente por usuario

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