Можно ли POST a responseType: 'stream' в Ax ios? - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь отредактировать экземпляр Ax ios, чтобы тип ответа был 'stream', а не стандартный JSON.

Мне не ясно из других постов на SO, как это можно сделать.

Это тупик ??

Мой текущий топор ios Экземпляр:

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);

The 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);

1 Ответ

0 голосов
/ 04 февраля 2020

Хотя представляется возможным указать responseType 'stream', например:

      const response = await Api({
        url: '/data',
        method: 'POST',
        responseType: 'stream',
        data: query
      }); 

Ax ios 'xhr.js Файл выдаст это предупреждение в браузере:

The provided value 'stream' is not a valid enum value of type XMLHttpRequestResponseType.

Подробнее о документации:
Ax ios Запрос конфигурации указывает, что 'stream' является приемлемым responseType. В частности, если вы посмотрите в axios/index.d.ts:

export type ResponseType = 
  | 'arraybuffer' 
  | 'blob' 
  | 'document' 
  | 'json' 
  | 'text' 
  | 'stream' 

Однако WHATWG spe c для XMLHttpRequest показывает, что 'stream' недопустимо:

enum XMLHttpRequestResponseType {
  "",
  "arraybuffer",
  "blob",
  "document",
  "json",
  "text"
};

Проблема в том, что XhrAdapter используется Ax ios при выполнении запросов со стороны клиента / в браузере. Если Ax ios на стороне сервера, будет использоваться HttpAdapter. XhrAdapter должен будет выполнить XMLHttpRequests , но сервер может выполнить HttpRequests, поэтому существует множество сообщений об обработке потоков в Node с Ax ios, поскольку Node является бэкэнд-решением.

По-видимому, невозможно передавать результаты с помощью Ax ios на стороне клиента. fetch() может быть единственным вариантом.

...