首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node-fetch not working with Electron 11,error resp.body.pipe is not a function

Node-fetch not working with Electron 11,error resp.body.pipe is not a function
EN

Stack Overflow用户
提问于 2021-08-24 19:23:30
回答 1查看 151关注 0票数 0

所以我基本上是在尝试使用node-fetch从一个网址下载一个压缩包,但是我得到了这个错误:TypeError: res.body.pipe is not a function

因为我已经将我的电子应用程序版本从"electron": "^8.2.3"更新到了"electron": "^11.0.1"

我的下载功能似乎不再工作了,我不能理解这个问题。因为我的应用是基于这个样板的,所以我在一个干净的electron-react-boilerplate上试了试,我也遇到了同样的错误。

我用来下载这个图片的函数如下:

代码语言:javascript
复制
import React from 'react';
import fetch from 'node-fetch';
import { createWriteStream } from 'fs';

const Hello = () => {
  const onDownload = async () => {
    const { url } = { url: 'https://file-examples-com.github.io/uploads/2017/02/zip_10MB.zip' };

    try {
      const res = await fetch(url);
      const { status } = res;

      if (status === 200) {
        const fileStream = createWriteStream(
          `./downloads/archive.zip`
        );

        res.body.pipe(fileStream);
      } else {
        console.log('error');
      }
      res.body.on('end', () => {
        console.log('end');
      });
    } catch (error) {
      console.log(error);
    }
  };
  return (
    <div>
      <h1>electron-react-boilerplate</h1>
      <div className="Hello">
        <button type="button" onClick={() => onDownload()}>
          Download
        </button>
      </div>
    </div>
  );
};

同样的功能在旧的电子版本上也没有问题,我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-30 10:47:50

我找到了一个解决方案,通过从node-fetch切换到axios。我认为其他任何人在未来都可能遇到这个问题,所以我将在这里分享我的解决方案:

代码语言:javascript
复制
try {
    const res = await axios(url, {
      headers: {
        Authorization: `Bearer ${accessToken}`,
      },
      onDownloadProgress: (progressEvent) => {
        const percentage = Math.round(
          (progressEvent.loaded * 100) / progressEvent.total
        );
        dispatch(downloadProgress());
        if (percentage === 100) {
          dispatch(downloadEnd());
        }
      },
    });
    const { status } = res;

    if (status === 200) {
      const fileStream = await createFileStream(folderPath, id);
      res.body.pipe(fileStream);
    } else {
      dispatch(downloadAccessError());
    }
  } catch (error) {
    dispatch(downloadError());
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68913027

复制
相关文章

相似问题

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