You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NestJS中如何从URL下载数据写入JSON文件并解决TS2339报错

问题原因

该报错为TypeScript类型校验错误,未给Axios请求返回值指定数据类型时,TypeScript默认将response.data推断为unknown类型,无法识别其为可读流,因此找不到pipe方法。

解决方法

  1. 首先导入所需的类型依赖
import { Readable } from 'stream';
import type { AxiosResponse } from 'axios';
import * as path from 'path';
// 其余原有导入保持不变
  1. 给Axios请求加上泛型约束,明确返回的data为可读流类型,修正后的完整控制器代码如下:
export class DataController {
  constructor(private readonly httpService: HttpService) { }

  @Get()
  async download(@Res() res) {
    // 可通过path.resolve指定写入的绝对路径,避免相对路径不确定性
    const writer = createWriteStream(path.resolve(__dirname, './指定存储目录/user.json'));

    // 给axiosRef添加泛型,指定返回数据为Readable类型
    const response: AxiosResponse<Readable> = await this.httpService.axiosRef({
      url: 'https://api.github.com/users/prasadg',
      method: 'GET',
      responseType: 'stream',
      headers: {
        'Content-Type': 'application/json',
      }
    });

    // 可选:增加运行时类型校验,逻辑更安全
    if (!(response.data instanceof Readable)) {
      throw new Error('接口返回数据不是可读流类型');
    }
    response.data.pipe(writer);

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

修改完成后类型报错即可消除,接口返回的JSON流会正常写入到你指定目录下的user.json文件中。


内容的提问来源于stack exchange,提问作者Prasad Gavande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:42:03