我试图编辑一个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);post的axios签名如下所示:
axios.post(url[, data[, config]])
此签名似乎并不表示新创建的axios实例具有与流相关的属性。理想情况下,我可以这样做:
const response = await Api.post(URL, responseType: 'stream', query);或潜在的:
const response = await Api(responseType: 'stream').post(URL, query);发布于 2020-02-04 16:53:45
虽然似乎可以像这样指定一个responseType of 'stream':
const response = await Api({
url: '/data',
method: 'POST',
responseType: 'stream',
data: query
}); Axios的xhr.js文件将在浏览器中抛出此警告:
提供的值'stream‘不是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"
};问题是XhrAdapter是由Axios在从客户端/在浏览器中发出请求时使用的。如果Axios位于服务器端,则将使用HttpAdapter。XhrAdapter需要制作XMLHttpRequests,但是服务器可以制作HttpRequests,所以有很多关于用Axios处理Node中的流的帖子,因为Node是后端解决方案。
似乎不可能在客户端使用Axios来流结果。fetch()可能是唯一的选择。
发布于 2021-09-11 13:21:55
我用使用Axios库,但只使用GET方法。守则开始:
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个月过去了,什么也没有。
https://stackoverflow.com/questions/60048180
复制相似问题