我想编辑Axios的实例,以便响应类型应该是'stream'
标准JSON而不是标准JSON。
在SO上的其他帖子中,我似乎还不清楚如何实现这一目标。
这是死胡同吗?
import axios from 'axios';
import { URL } from '../urls';
import {
requestHandler,
successHandler,
errorHandler,
} from './Handlers';
const Api = axios.create({
baseURL: `${URL}`,
withCredentials: true,
});
Api.interceptors.request.use((request) => requestHandler(request));
Api.interceptors.response.use((response) => successHandler(response), (error) => errorHandler(error));
export default Api;
const query = {"selections":{"TABLE_A":["COLUMN1"]},"filters":[{"predicates":[]}],"joins":[],"sorts":[],"limit":100,"offset":0}
const response = await Api.post('/data', query);
axios
帖子的签名如下所示:
axios.post(url[, data[, config]])
示例1
示例2
这个签名似乎并不表示新创建的实例axios
具有与流相关的属性。理想情况下,我将能够执行以下操作:
const response = await Api.post(URL, responseType: 'stream', query);
或潜在地:
const response = await Api(responseType: 'stream').post(URL, query);
虽然似乎可以指定这样的responseType 'stream'
:
const response = await Api({
url: '/data',
method: 'POST',
responseType: 'stream',
data: query
});
Axios的xhr.js
文件将在浏览器中引发以下警告:
The provided value 'stream' is not a valid enum value of type XMLHttpRequestResponseType.
进一步深入文档:
Axios请求配置表明这'stream'
是可以接受的responseType
。具体来说,如果您看一下axios/index.d.ts
:
export type ResponseType =
| 'arraybuffer'
| 'blob'
| 'document'
| 'json'
| 'text'
| 'stream'
但是,XMLHttpRequest的WHATWG规范显示这'stream'
是无效的:
enum XMLHttpRequestResponseType {
"",
"arraybuffer",
"blob",
"document",
"json",
"text"
};
问题在于,当从客户端/在浏览器中发出请求时,Axios会使用XhrAdapter。如果Axios在服务器端,则将使用HttpAdapter。XhrAdapter将需要发出XMLHttpRequests,而服务器可以发出HttpRequests,因此有大量关于使用Axios处理Node中的流的文章,因为Node是一个后端解决方案。
似乎无法在客户端使用Axios流式传输结果。fetch()
可能是唯一的选择。