axios / fetch 实现 stream 流式请求

打印 上一主题 下一主题

主题 786|帖子 786|积分 2358

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

一、node端

代码演示:
  1. const axios = require('axios');
  2. axios({
  3.   method: 'get',
  4.   url: 'http://tiven.cn/static/img/axios-stream-01-kcUzNdZO.jpg',
  5.   responseType: 'stream'
  6. })
  7. .then(response => {
  8.   
  9.   response.data.on('data', (chunk) => {
  10.     // 处理流数据的逻辑
  11.   });
  12.   response.data.on('end', () => {
  13.     // 数据接收完成的逻辑
  14.   });
  15. });
复制代码
二、欣赏器端

在欣赏器端,axios 是利用 XMLHttpRequest 对象来实现请求,设置 responseType: 'stream' 后会出现以下告诫⚠️:
The provided value 'stream' is not a valid enum value of type XMLHttpRequestResponseType.
以是,在欣赏器端,我们需要利用欣赏器内置API fetch 来实现 stream 流式请求。
代码演示:
  1. async function getStream() {
  2.   try {
  3.     let response = await fetch('/api/admin/common/testStream');
  4.     console.log(response);
  5.    
  6.     if (!response.ok) {
  7.       throw new Error('Network response was not ok');
  8.     }
  9.     const reader = response.body.getReader();
  10.     const textDecoder = new TextDecoder();
  11.     let result = true;
  12.     let output = ''
  13.     while (result) {
  14.       const { done, value } = await reader.read();
  15.       if (done) {
  16.         console.log('Stream ended');
  17.         result = false;
  18.         break;
  19.       }
  20.       const chunkText = textDecoder.decode(value);
  21.       output += chunkText;
  22.       console.log('Received chunk:', chunkText);
  23.     }
  24.   } catch (e) {
  25.     console.log(e);
  26.   }
  27. }
复制代码

欢迎访问:天问博客

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表