Estoy tratando de transmitir datos de precios a través de HTTP (no sé por qué no usan websockets...) y uso axios para hacer solicitudes API REST normales, pero no sé cómo manejar 'Codificación de transferencia': ' tipo de solicitudes fragmentadas.
Este código simplemente se bloquea y no produce ningún error, así que suponga que funciona pero no puede procesar la respuesta:
const { data } = await axios.get(`https://stream.example.com`, {headers: {Authorization: `Bearer ${token}`, 'Content-Type': 'application/octet- stream'}}) console.log(data) // execution hangs before reaching hereAprecio tu ayuda.
SOLUCIÓN DE TRABAJO: como se indica en la respuesta a continuación, debemos agregar un tipo de respuesta: transmisión como una opción de axios y también agregar un detector de eventos en la respuesta.
Código de trabajo:
const response = await axios.get(`https://stream.example.com`, { headers: {Authorization: `Bearer ${token}`}, responseType: 'stream' }); const stream = response.data stream.on('data', data => { data = data.toString() console.log(data) })FYI, enviar el encabezado de content-type para una solicitud GET no tiene sentido. El encabezado de tipo de contenido se aplica al CUERPO de la solicitud http y no hay cuerpo para una solicitud GET.
Con la biblioteca axios() , si desea obtener acceso directo al flujo de respuesta, use la opción responseType para decirle a Axios que desea acceder al flujo de respuesta sin procesar:
const response = await axios.get('https://stream.example.com', { headers: {Authorization: `Bearer ${token}`, responseType: 'stream' }); const stream = response.data; stream.on('data', data => { console.log(data); }); stream.on('end', () => { console.log("stream done"); });Referencia del documento Axios aquí .