【问题标题】:How to read and parse a CSV file from an Axios GET request in Node/Express?如何从 Node/Express 中的 Axios GET 请求中读取和解析 CSV 文件?
【发布时间】:2021-06-26 06:46:14
【问题描述】:

我正在创建一个使用 axios 向以下 URL 发出 GET 请求的 Node/Express 后端:https://marknadssok.fi.se/Publiceringsklient/sv-SE/Search/Search?SearchFunctionType=Insyn&Utgivare=&PersonILedandeSt%C3%A4llningNamn=&Transaktionsdatum.From=&Transaktionsdatum.To=&Publiceringsdatum.From=2021-03-30&Publiceringsdatum.To=2021-03-30&button=export&Page=1

使用常规浏览器时,响应是文件下载,其中包含 CSV 文件中的数据。

有没有办法在我正在构建的 Node/Express 后端读取和解析这个 CSV 文件?我不希望将数据保存到文件系统或任何东西。只需使用诸如“csv-parse”之类的库,即可将此 CSV 文件转换为文件中每一行的对象。

提前致谢!

编辑:

当我尝试使用 console.log 时直接读取 jsonArray 文件的示例时,它看起来像这样:

实际的 CSV 文件看起来和它应该的一样。见这里:

【问题讨论】:

  • 下载并读取 CSV 文件的结果如何?
  • 当我保存到磁盘时,实际的 .CSV 文件看起来应该是这样。 CSV 文件的解析不起作用。它吐出相同的字符。
  • 关于可能是什么问题的任何其他建议?
  • @JohanCarlberger — 我们无法解释为什么您没有向我们展示的某些代码会以这种方式运行。您需要提供minimal reproducible example(遵循How to Ask 中的建议通常也是一个好主意)。

标签: node.js express parsing axios node-csv-parse


【解决方案1】:

您可以使用以下示例。它下载一个 CSV 文件,读取它,然后将其删除。但是,您提供链接的 CSV 文件中使用的分隔符,\x00 的形式,文件看起来像这样。最好的办法是使用不同的 CSV 文件或逐行解析生成的 CSV 文件。我认为您可以针对此问题提出不同的问题。

const fs = require('fs');
const csv = require('csvtojson');
const https = require('https');

let url = "https://marknadssok.fi.se/Publiceringsklient/sv-SE/Search/Search?SearchFunctionType=Insyn&Utgivare=&PersonILedandeSt%C3%A4llningNamn=&Transaktionsdatum.From=&Transaktionsdatum.To=&Publiceringsdatum.From=2021-03-30&Publiceringsdatum.To=2021-03-30&button=export&Page=1";

async function parseCSV(url) {

    const dest = __dirname + '/foo.csv'; // You can use uuid like packages to name the csv file

    return new Promise((resolve, reject) => {

        var file = fs.createWriteStream(dest);

        https.get(url, function (response) {
            response.pipe(file);
            file.on('finish', function () {
                file.close();
                csv({
                    noheader:true,
                    trim:true
                }).fromFile(dest).then(jsonArray => {
                    fs.unlinkSync(dest);
                    resolve(jsonArray);
                })
                
            });
        }).on('error', function (err) { // Handle errors
            fs.unlinkSync(dest);
            reject(new Error("Download failed."));
        });
    });
}
    

parseCSV(url).then( result => {
    result.forEach(row => {

        row = row.field1;
        console.log(row);
    });
});

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 2020-10-14
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多