我正在学习Node,Express和React,并试图将一个简单的通用Fetch方法转换为Axios,我使用该方法来调用Express API。当我希望Axios自动返回JSON数据的结果时,我已经让Axios工作了,但在这里我希望它返回ReadableStream
。从文档来看,应该很简单:简单地将字段responseType:'stream'
添加到config
,但我一直得到错误The provided value 'stream' is not a valid enum value of type XMLHttpRequestResponseType.
我看到其他人也有这个问题(见https://github.com/axios/axios/issues/1474),但我没有看到任何解决方案。有谁知道有没有,或者我做错了什么?相关代码如下。感谢任何见解!
const logic = {
_call(path, method, headers, body, expectedStatus) {
const config = { method,responseType:'stream', url: `http://localhost:8080/${path}`}
if (headers) config.headers = headers
if (body) config.data = body
return axios( config)
.then(res => {
if (res.status === expectedStatus) {
return res
} else
return res
.then(({ message }) => {
throw new Error(message)
})
})
}
}
1条答案
按热度按时间ghhaqwfi1#
This answer might be worth checking out if you explicitly need the stream in Axios.
也就是说,我更喜欢默认的
fetch
,因为它更灵活。如果有人感兴趣的话,这里有一个客户端方法,可以将流作为可迭代块的列表来获取。从上到下,这是最终调用的样子:
generateStream
函数是执行实际API调用的函数,它看起来像这样:最后,这里是
getIterableStream
函数,它在字节块被加载时读取字节块并将其解码为字符串:请注意
async function* getIterableStream
中的星星。这个语法定义了一个asynchronous generator函数。