Я создаю серверную часть 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 выглядит так, как должен. Глянь сюда:
Когда я сохраняю на диск, настоящий файл .CSV выглядит так, как должен. Не работает разбор CSV-файла. Он выплевывает тех же персонажей.





Вы можете загрузить этот файл по 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");
Будет ли существующий файл перезаписан, если он имеет то же имя файла?
Он не будет перезаписан, если вы удалите папку /tmp/foo после получения объекта jsonArray. Или вы можете использовать вспомогательный пакет, например uuid, для создания уникальных идентификаторов для ваших файлов.
Итак, есть ли способ прочитать файл из памяти напрямую, вместо того, чтобы сначала записать его в папку, прежде чем читать? Файл будет извлекаться / сканироваться каждые 10-15 секунд или около того для проверки изменений, поэтому сохранение его на диск кажется ненужным шагом.
Замечательно - не могли бы вы предоставить мне пример кода при прямом использовании потока? Также функция https.get () встроена в Node или пример использования Axios? Я обязательно приму ответ, как только смогу протестировать эту реализацию самостоятельно. : D
https и fs - это встроенные пакеты Node.js. вы должны включить их в проект. Я обновил свой ответ. Вы можете это проверить.
У вас также был пример кода, в котором ответ (файл) анализируется напрямую, без записи на диск? Большое спасибо за помощь!
Добро пожаловать! Я обновил свой ответ. FYI npm i request для установки пакета request
Почему именно вы выбрали request, если пакет устарел с 11 февраля 2020 года?
Большое спасибо!! Я попробую это сделать, как только смогу, и дам вам знать, как это получится: D
Можно ли использовать axios вместо request?
@esqew Я этого не знал. Я подумал, что будет проще использовать request. Я просто предлагаю вам использовать любой другой метод
Я обновил свой вопрос, добавив снимок экрана, на котором console.info мне кажется, что некоторая кодировка символов работает не так, как должна. Я использую request для получения файла. Как бы выглядел пример с использованием аксиомов? Когда я пробую Axios, я получаю typeError с readStream.pipe is not a function
Каков результат при загрузке и чтении файла CSV?