Tor*_*orc 5 javascript stream reactjs axios
我正在尝试编辑 Axios 的一个实例,以便响应类型应该是一个'stream'而不是标准的 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;
Run Code Online (Sandbox Code Playgroud)
const query = {"selections":{"TABLE_A":["COLUMN1"]},"filters":[{"predicates":[]}],"joins":[],"sorts":[],"limit":100,"offset":0}
const response = await Api.post('/data', query);
Run Code Online (Sandbox Code Playgroud)
axios帖子的签名如下所示:
axios.post(url[, data[, config]])
示例 1
示例 2
此签名似乎并不表示新创建的实例axios具有与流相关的属性。理想情况下,我将能够做这样的事情:
const response = await Api.post(URL, responseType: 'stream', query);
Run Code Online (Sandbox Code Playgroud)
或可能:
const response = await Api(responseType: 'stream').post(URL, query);
Run Code Online (Sandbox Code Playgroud)
Tor*_*orc 12
'stream'虽然似乎可以指定这样的responseType :
const response = await Api({
url: '/data',
method: 'POST',
responseType: 'stream',
data: query
});
Run Code Online (Sandbox Code Playgroud)
Axios 的xhr.js文件将在浏览器中抛出此警告:
提供的值“stream”不是 XMLHttpRequestResponseType 类型的有效枚举值。
进一步深入研究文档:
Axios 请求配置表明这'stream'是可以接受的responseType。具体来说,如果您查看以下内容axios/index.d.ts:
export type ResponseType =
| 'arraybuffer'
| 'blob'
| 'document'
| 'json'
| 'text'
| 'stream'
Run Code Online (Sandbox Code Playgroud)
但是, XMLHttpRequest的 WHATWG 规范显示该'stream'规范无效:
enum XMLHttpRequestResponseType {
"",
"arraybuffer",
"blob",
"document",
"json",
"text"
};
Run Code Online (Sandbox Code Playgroud)
问题是 Axios 在从客户端/浏览器中发出请求时使用 XhrAdapter。如果axios在服务器端,就会使用HttpAdapter。XhrAdapter 需要生成XMLHttpRequest,但服务器可以生成 HttpRequest,因此有大量关于使用 Axios 在 Node 中处理流的帖子,因为 Node 是后端解决方案。
似乎无法在客户端使用 Axios 传输结果。fetch()可能是唯一的选择。