首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在Axios中发布responseType:“Axios”?

是否可以在Axios中发布responseType:“Axios”?
EN

Stack Overflow用户
提问于 2020-02-03 22:43:11
回答 2查看 12.8K关注 0票数 6

我试图编辑一个Axios实例,以便响应类型应该是一个'stream',而不是标准的JSON。

在我看来,从其他关于S.O.的帖子中,我似乎不清楚这是如何实现的。

这是死胡同吗?

我目前的Axios实例:

代码语言:javascript
复制
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;

已执行:

代码语言:javascript
复制
const query = {"selections":{"TABLE_A":["COLUMN1"]},"filters":[{"predicates":[]}],"joins":[],"sorts":[],"limit":100,"offset":0}
const response = await Api.post('/data', query);

post的axios签名如下所示:

axios.post(url[, data[, config]])

示例1

示例2

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

代码语言:javascript
复制
const response = await Api.post(URL, responseType: 'stream', query);

或潜在的:

代码语言:javascript
复制
const response = await Api(responseType: 'stream').post(URL, query);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-04 16:53:45

虽然似乎可以像这样指定一个responseType of 'stream'

代码语言:javascript
复制
const response = await Api({
    url: '/data',
    method: 'POST',
    responseType: 'stream',
    data: query
}); 

Axios的xhr.js文件将在浏览器中抛出此警告:

提供的值'stream‘不是XMLHttpRequestResponseType类型的有效枚举值。

进一步深入了解文档:

Axios请求配置表示'stream'是可接受的responseType。具体来说,如果您查看一下axios/index.d.ts中的内容:

代码语言:javascript
复制
export type ResponseType = 
  | 'arraybuffer' 
  | 'blob' 
  | 'document' 
  | 'json' 
  | 'text' 
  | 'stream' 

但是,XMLHttpRequest的WHATWG规范表明'stream'是无效的:

代码语言:javascript
复制
enum XMLHttpRequestResponseType {
  "",
  "arraybuffer",
  "blob",
  "document",
  "json",
  "text"
};

问题是XhrAdapter是由Axios在从客户端/在浏览器中发出请求时使用的。如果Axios位于服务器端,则将使用HttpAdapter。XhrAdapter需要制作XMLHttpRequests,但是服务器可以制作HttpRequests,所以有很多关于用Axios处理Node中的流的帖子,因为Node是后端解决方案。

似乎不可能在客户端使用Axios来流结果。fetch()可能是唯一的选择。

票数 5
EN

Stack Overflow用户

发布于 2021-09-11 13:21:55

我用使用Axios库,但只使用GET方法。守则开始:

代码语言:javascript
复制
const streamTweets = async (socket,token) => {
    let stream;
    
    const headers = {
        'Authorization':"Bearer "+BEARER_TOKEN,
    }
    const options = {
        method:"GET",
        url:streamURL,
        headers:headers,
        timeout:31000,
        stream:true,
        responseType:"stream"
    };

    try {
        console.log("Uruchamiam funkcję streamTweets");
        // const stream = await axios(options);
        axios(options).then(respobj => {

我认为这两个选项-流和responseType -必须设置。但是,如果您使用socket.io库使用Twitter,请注意它可能会出错,因为套接字发出事件之后不会执行任何代码。我向Socket开发人员指出了这一点,但是6个月过去了,什么也没有。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60048180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档