如何使用NestJS调用外部API来下载文件?

3

我想在我的应用程序中调用外部API并下载JSON文件。使用带有axios的简单node.js项目,我可以按如下方式实现。

const fs = require('fs');

const axios = require('axios').default;


axios.get('https://www.nseindia.com/').then(res => {
  return axios.get('https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY', {
    headers: {
      cookie: res.headers['set-cookie'] 
  }
  })
}).then(res => {
  //console.log(res.data);
  let data = JSON.stringify(res.data)
  fs.writeFileSync('../files/option-chain-indices.json',data);
}).catch(err => {
  console.log(err);
})

这个功能可以下载文件夹中的文件。

但我不知道如何在NestJs中实现这个功能?


1
为什么您不能使用上面的代码?您是特别想要使用 @nestjs/axios 还是只是需要以任何可能的方式完成它?您在 Nest 服务器中尝试了什么? - Jay McDoniel
1个回答

3

我认为你需要做的是创建一个服务(Service),将你的示例代码放入一个函数中,然后通过DI从控制器(Controller)或解析器(Resolver)调用该函数到你刚创建的服务中。

请参考下面的示例代码。

import { Injectable } from '@nestjs/common';
import * as fs from "fs";
import * as axios from "axios";
@Injectable()
export class FileService {
  saveFile() {
    return axios
      .get("https://www.nseindia.com/")
      .then((res) => {
        return axios.get(
          "https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY",
          {
            headers: {
              cookie: res.headers["set-cookie"],
            },
          }
        );
      })
      .then((res) => {
        //console.log(res.data);
        let data = JSON.stringify(res.data);
        fs.writeFileSync("../files/option-chain-indices.json", data);
        return data;
      })
      .catch((err) => {
        console.log(err);
      });
  }
}

根据nestjs文档,您还可以使用HttpModule而不是原始的axios。


我在这里遇到了另一个错误,已发布新的问题 https://dev59.com/HLD2oIgBc1ULPQZF-hIA - Prasad Gavande

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接