首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Axios错误:.data.pipe不是一个函数

Axios错误:.data.pipe不是一个函数
EN

Stack Overflow用户
提问于 2021-01-06 20:26:55
回答 4查看 7.4K关注 0票数 4

因此,我基本上是试图使用axios从url下载一个图像,但是我得到了以下错误:

TypeError: streamResponse.data.pipe is not a function

我的图像下载功能如下(注意,这是在一个类中):

代码语言:javascript
运行
复制
/**
 * Download poster
 */
async downloadPoster() {

    // Writer stream where we want to download the poster image
    const writer = fs.createWriteStream(this.poster.file);

    // This grabs the second part of the image url that we want
    const resultsResponse = await axios({
        url: this.poster.url,
        method: 'GET',
        responseType: 'json',
        adapter: httpAdapter
    });

    // Zero results
    if (resultsResponse.data.total_results <= 0) {
        logger.log(language[Config.language].posterNotFound + this.movie.title, 'error');
        return false;
    }

    // Create the poster download URL
    var posterDownloadUrl = new URL(Config.api.posterUrl + resultsResponse.data.results[0].poster_path);

    const streamResponse = await axios({
        url: posterDownloadUrl,
        method: 'GET',
        responseType: 'stream',
        adapter: xhrAdapter
    });

    // Write data
    streamResponse.data.pipe(writer);

    return new Promise((resolve, reject) => {
        writer.on('finish', resolve);
        writer.on('error', reject);
    });

}

我假设流响应的适配器是xhr适配器。无论如何,我尝试过这两个适配器,并且都给出了完全相同的错误。但是这两个请求都会发生(我可以在devtools中看到它们)。

所以没有混淆,我在文件的顶部导入了适配器:

const httpAdapter = require('axios/lib/adapters/http');

const xhrAdapter = require('axios/lib/adapters/xhr');

我在这里做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-01-07 14:49:14

通过将下载请求发送到主线程使其工作。不知道为什么,但似乎您无法从renderer.js文件中的流中访问axios数据。不过,在看了一下这里之后,它现在开始工作了:

https://www.electronjs.org/docs/api/ipc-main

票数 1
EN

Stack Overflow用户

发布于 2021-01-07 02:35:29

下面是您代码的一个更简单的版本。

代码:

代码语言:javascript
运行
复制
const downloadImage = async (url) => {
    // Writer stream where we want to download the image
    const writer = fs.createWriteStream("./image.png");

    const streamResponse = await axios({
        url,
        method: 'GET',

        // that the point!!!
        // change responseType to stream
        // pipe only work with 'stream'
        responseType: 'stream'
    });

    // Write data
    streamResponse.data.pipe(writer);

    writer.on('finish', () => console.log("Finished"));
    writer.on('error', () => console.error("Error while dowloading image"));
}
const imageLink = "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Image_created_with_a_mobile_phone.png/1200px-Image_created_with_a_mobile_phone.png";
downloadImage(imageLink);
票数 5
EN

Stack Overflow用户

发布于 2022-04-24 08:17:25

必须将AxiosRequestConfig而不是responseType头添加为responseType

代码语言:javascript
运行
复制
 const response = await axios(`${url}/api/v1/rest/export`, {
      method: 'POST',
      responseType: 'stream',
      headers: {
        'Content-Type': 'application/json',
        Authorization: authToken.includes('Bearer') ? authToken : `Bearer ${authToken}`,
      },
      data: query,
    });
    response.data.pipe(fs.createWriteStream('./export.csv'));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65602941

复制
相关文章

相似问题

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