axios / fetch 实现 stream 流式请求

axios 是一个支持node端和浏览器端的易用、简洁且高效的http库。本文主要介绍 axios 如何实现 stream 流式请求,注意这里需要区分 node 环境和浏览器环境。

一、node端

const axios = require('axios');

axios({
  method: 'get',
  url: 'http://tiven.cn/static/img/axios-stream-01-kcUzNdZO.jpg',
  responseType: 'stream'
}).then(response => {
   response.data.on('data', (chunk) => {
    // 处理流数据的逻辑
  });
  response.data.on('end', () => {
// 数据接收完成的逻辑
});
});

二、浏览器端

在浏览器端,axios 是使用 XMLHttpRequest 对象来实现请求,设置 responseType: 'stream' 后会出现以下警告⚠️:The provided value 'stream' is not a valid enum value of type XMLHttpRequestResponseType.所以,在浏览器端,我们需要使用浏览器内置API fetch 来实现 stream 流式请求。

代码演示:

async function getStream() {
  try {
    let response = await fetch('/api/admin/common/testStream');
    console.log(response);
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }   
    const reader = response.body.getReader();
    const textDecoder = new TextDecoder();
    let result = true;
    let output = ''
    while (result) {
        const { done, value } = await reader.read();

      if (done) {
        console.log('Stream ended');
       result = false;
       break;
      }
      const chunkText = textDecoder.decode(value);
      output += chunkText;
      console.log('Received chunk:', chunkText);
    }
  } catch (e) {
    console.log(e);
 }
}
原文链接:https://blog.csdn.net/tiven_/article/details/132367904

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容