Как прочитать и проанализировать файл CSV из запроса Axios GET в Node / Express?

Я создаю серверную часть Node / Express, которая использует axios для выполнения запроса GET по этому 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

При использовании обычного браузера ответом является загрузка файла с данными в файле CSV.

Есть ли способ прочитать и проанализировать этот CSV-файл в серверной части Node / Express, которую я создаю? Я не хочу сохранять данные в файловой системе или в чем-то еще. Просто используйте библиотеки, такие как «csv-parse», чтобы превратить этот CSV-файл в объект для каждой строки в файле.

Заранее спасибо!

Обновлено:

Когда я пробую пример, в котором я читаю файл напрямую jsonArray, когда я использую console.info, он выглядит так:

Как прочитать и проанализировать файл CSV из запроса Axios GET в Node / Express?

Фактический файл CSV выглядит так, как должен. Глянь сюда:

Как прочитать и проанализировать файл CSV из запроса Axios GET в Node / Express?

Каков результат при загрузке и чтении файла CSV?

Murat Colyaran 31.03.2021 11:45

Когда я сохраняю на диск, настоящий файл .CSV выглядит так, как должен. Не работает разбор CSV-файла. Он выплевывает тех же персонажей.

Johan Carlberger 01.04.2021 15:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
57
1

Ответы 1

Вы можете загрузить этот файл по URL-адресу и проанализировать CSV-файл с помощью пакета

Например, эта функция помогает вам загрузить файл CSV с URL-адреса:

const https = require('https');
const fs = require('fs);
//  Download a file and extract the destination
function downloadFromUrl(url, dest) {
    return new Promise((resolve, reject) => {

        var file = fs.createWriteStream(dest);
        https.get(url, function (response) {
            response.pipe(file);
            file.on('finish', function () {
                file.close();
                resolve(dest);
            });
        }).on('error', function (err) { // Handle errors
            fs.unlinkSync(dest);
            reject(new Error("Download failed."));
        });
    });
}
await downloadFromUrl("someurl", "/tmp/foo/bar.csv");

Затем вы можете обработать файл CSV. примечание: чтобы скачать пакет npm i csvtojson

const csv = require('csvtojson');
const jsonArray = await csv().fromFile("/tmp/foo/bar.csv");

Редактировать:

Если вы не хотите загружать файл и просто используете поток с URL-адреса.

const request = require('request');
const csv = require('csvtojson');

async function myFunc(url) {

    let jsonArray = await csv()
        .fromStream(request.get(url));

    console.info(jsonArray);
    return jsonArray;
}

let data = myFunc("example.com");

Будет ли существующий файл перезаписан, если он имеет то же имя файла?

Johan Carlberger 30.03.2021 12:25

Он не будет перезаписан, если вы удалите папку /tmp/foo после получения объекта jsonArray. Или вы можете использовать вспомогательный пакет, например uuid, для создания уникальных идентификаторов для ваших файлов.

Murat Colyaran 30.03.2021 12:29

Итак, есть ли способ прочитать файл из памяти напрямую, вместо того, чтобы сначала записать его в папку, прежде чем читать? Файл будет извлекаться / сканироваться каждые 10-15 секунд или около того для проверки изменений, поэтому сохранение его на диск кажется ненужным шагом.

Johan Carlberger 30.03.2021 13:23

Замечательно - не могли бы вы предоставить мне пример кода при прямом использовании потока? Также функция https.get () встроена в Node или пример использования Axios? Я обязательно приму ответ, как только смогу протестировать эту реализацию самостоятельно. : D

Johan Carlberger 30.03.2021 13:44
https и fs - это встроенные пакеты Node.js. вы должны включить их в проект. Я обновил свой ответ. Вы можете это проверить.
Murat Colyaran 30.03.2021 15:41

У вас также был пример кода, в котором ответ (файл) анализируется напрямую, без записи на диск? Большое спасибо за помощь!

Johan Carlberger 30.03.2021 15:45

Добро пожаловать! Я обновил свой ответ. FYI npm i request для установки пакета request

Murat Colyaran 30.03.2021 15:57

Почему именно вы выбрали request, если пакет устарел с 11 февраля 2020 года?

esqew 30.03.2021 16:00

Большое спасибо!! Я попробую это сделать, как только смогу, и дам вам знать, как это получится: D

Johan Carlberger 30.03.2021 16:01

Можно ли использовать axios вместо request?

Johan Carlberger 30.03.2021 17:20

@esqew Я этого не знал. Я подумал, что будет проще использовать request. Я просто предлагаю вам использовать любой другой метод

Murat Colyaran 30.03.2021 17:58

Я обновил свой вопрос, добавив снимок экрана, на котором console.info мне кажется, что некоторая кодировка символов работает не так, как должна. Я использую request для получения файла. Как бы выглядел пример с использованием аксиомов? Когда я пробую Axios, я получаю typeError с readStream.pipe is not a function

Johan Carlberger 30.03.2021 20:43

Другие вопросы по теме