使用 Axios 的 HTTP 流(Node JS)
HTTP Stream using Axios (Node JS)
我正在尝试通过 HTTP 传输价格数据(不知道他们为什么不使用 websockets..)并且我使用 axios 来发出正常的 REST API 请求,但我不知道如何处理 'Transfer Encoding': 'chunked' 类型的请求。
此代码只是挂起,不会产生任何错误,因此假设它正在运行但无法处理响应:
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 here
感谢您的帮助。
工作解决方案:
正如下面的答案所指出的,我们需要添加一个 responseType: stream 作为 axios 选项,并在响应中添加一个事件监听器。
工作代码:
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)
})
仅供参考,为 GET 请求发送 content-type
header 是没有意义的。 content-type header适用于http请求的BODY,GET请求没有body。
使用 axios()
库,如果你想直接访问响应流,你可以使用 responseType
选项告诉 Axios 你想要访问原始响应流:
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");
});
axios 文档参考 here.
我正在尝试通过 HTTP 传输价格数据(不知道他们为什么不使用 websockets..)并且我使用 axios 来发出正常的 REST API 请求,但我不知道如何处理 'Transfer Encoding': 'chunked' 类型的请求。
此代码只是挂起,不会产生任何错误,因此假设它正在运行但无法处理响应:
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 here
感谢您的帮助。
工作解决方案: 正如下面的答案所指出的,我们需要添加一个 responseType: stream 作为 axios 选项,并在响应中添加一个事件监听器。
工作代码:
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)
})
仅供参考,为 GET 请求发送 content-type
header 是没有意义的。 content-type header适用于http请求的BODY,GET请求没有body。
使用 axios()
库,如果你想直接访问响应流,你可以使用 responseType
选项告诉 Axios 你想要访问原始响应流:
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");
});
axios 文档参考 here.