如何从 Node/Express 中的 Axios GET 请求读取和解析 CSV 文件?

问题描述

我正在创建一个 Node/Express 后端,它使用 axios 向以下 URL 发出 GET 请求: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 如下所示:

enter image description here

实际的 CSV 文件看起来应该如此。看这里:

enter image description here

解决方法

您可以使用以下示例。它会下载一个 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);
    });
});

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...