1

我开始开发,Node JS我正在创建一个应用程序来实现以下目标:

下载包含在 API 中找到的 JSON 信息的 CSV。我有一个内部文件,其中包含 JSON 所在的 url,我需要从该 url 中提取信息并将其下载为 CSV。我正在使用json-2-csv,node-fetchfs模块。

我的问题:我无法访问 JSON 中包含的信息来下载它

这是我的controller

import { Request, Response } from 'express';
const converter = require("json-2-csv");
const fetch = require("node-fetch");
const fs = require("fs");

class IndexController {
  public async index(req: Request, res: Response) {
  const api =req.query.api; //api1
  const url = conf.API_MOCS[`${api}`].url; //url containing the json
  const getJson = async () => {
        const response = await fetch(url);
        const responseJson = await response.json();
        return responseJson;
    };
  }
}

export const indexController = new IndexController(); 
4

1 回答 1

0

问题是你从不调用你的getJson函数,即const jsonResponse = await getJson()缺少一个调用。不过,实际上没有必要在单独的函数中执行此操作。得到json后,需要将其传递给csv-converter,最后通过-object发送响应res

这是一个简化的示例(仍需要错误处理),它从假的 rest-api 获取 json 并将其转换为 csv 并允许用户下载它:

const express = require("express");
const app = express();
const port = 3000;

const converter = require("json-2-csv");
const fetch = require("node-fetch");

app.get("/", async (req, res) => {
  const url = "https://jsonplaceholder.typicode.com/users";
  const response = await fetch(url);
  const jsonResponse = await response.json();

  const csvString = await converter.json2csvAsync(jsonResponse);
  res.setHeader("Content-disposition", "attachment; filename=data.csv");
  res.set("Content-Type", "text/csv");
  res.status(200).send(csvString);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});
于 2021-06-07T07:47:37.830 回答