是否可以在Axios中发布responseType:'stream'?

问题描述 投票:0回答:1

我正在尝试编辑Axios的实例,以便响应类型应为'stream'而不是标准JSON。

从S.O.上的其他帖子看来,我不清楚如何做到这一点。

这是死胡同吗?

我当前的Axios实例:

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]])Example 1Example 2

此签名似乎并不表示axios的新创建实例具有与流相关的属性。理想情况下,我可以执行以下操作:

const response = await Api.post(URL, responseType: 'stream', query);

或可能是:

const response = await Api(responseType: 'stream').post(URL, query);
javascript reactjs stream axios
1个回答
0
投票

虽然似乎可以这样指定'stream'的responseType:

      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 Request Configuration表示'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,但是服务器可以进行HttpRequest,因此,由于Node是一个后端解决方案,因此存在大量有关使用Axios处理Node中的流的帖子。

似乎无法在客户端使用Axios流式传输结果。 fetch()可能是唯一的选择。

© www.soinside.com 2019 - 2024. All rights reserved.