Сначала файл CSV, который мы читаем, выглядит так:

data.csv

Чтобы прочитать любой вид заполнения в Node.js, мы можем использовать модуль fs, а также модуль fs предоставляет метод createReadStream, который мы можем использовать для чтения данных по частям, что означает, что нам не нужно ждать, пока весь файл завершит чтение, прежде чем используя данные.

Теперь импортируйте модуль fs и получите доступ к методу createReadStream внутри:

Server.js

"use strict";
import fs from "fs";
const userDataReadStream = fs.createReadStream(`${process.cwd()}/data.csv`);

Теперь мы собираемся добавить прослушиватель событий «данные» в наш userDataReadStream, чтобы всякий раз при чтении данных мы добавляли/помещали значение данных в переменную.

// ...
let rawData = ``;
userDataReadStream.on("data", (data) => {
rawData += data;
});

Мы снова назначим «конечный» прослушиватель событий тому же userDataReadStream,внутри этого «конечного» прослушивателя нам будут доступны прочитанные данные, и мы сможем использовать эти данные для чего угодно. мы хотим здесь.

// ...
userDataReadStream.on("end", () => {
console.log(rawData);
});

Теперь запустите node server.js в своем терминале, чтобы увидеть результат, убедитесь, что вы находитесь в каталоге проекта.

Результат

/*
id,name,job          ---> HEAD
1,john,web           ---> BODY
2,wale,designer      ---> BODY
3,femi,printer       ---> BODY
*/

Как мы видим, каждый столбец файла excel является результатом каждой отдельной новой строки.

Первая строка результата будет ГОЛОВОЙ, а остальные новые строки будут ТЕЛОМ.

Следующий шаг — преобразовать наши данные в массив с помощью метода split() и вывести их в консоль.

// ...
userDataReadStream.on("end", () => {
const arrayData = rawData.split("\n");
console.log(arrayData); // [ 'id,name,job', '1,john,web', '2,wale,designer', '3,femi,printer' ]
});

Теперь, когда наши данные представлены в формате массива, давайте отделим HEAD от BODY, используя деструктурирование, а также выведем их из журнала.

// ...
userDataReadStream.on("end", () => {
const arrayData = rawData.split("\n");
const [stringHeadData, ...arrayBodyData] = arrayData;
console.log(stringHeadData); // id,name,job
console.log(arrayBodyData); // [ '1,john,web', '2,wale,designer', '3,femi,printer' ]
});

Обратите внимание, что наши данные HEAD возвращаются, поскольку строка позволяет изменить HEAD обратно на массив и выйти из него.

// ...
userDataReadStream.on("end", () => {
const arrayData = rawData.split("\n");
const [stringHeadData, ...arrayBodyData] = arrayData;
const arrayHeadData = stringHeadData.split(",");
console.log(arrayHeadData); // [ 'id', 'name', 'job' ]
});

Также, если вы проверите массив BODY, вы увидите, что каждый индекс массива состоит из столбца внутри строки, поэтому теперь давайте сделаем так, чтобы каждый столбец находился в собственном массиве, и также выведем его из журнала, метод map вернет массив, а метод split поместит каждое значение в собственный индекс, где бы ни заканчивался «,».

// ...
userDataReadStream.on("end", () => {
//...
const bodyDatas = arrayBodyData.map((body) => body.split(","));
console.log(bodyDatas);
});

Результат

[
[ '1', 'john', 'web' ],
[ '2', 'wale', 'designer' ],
[ '3', 'femi', 'printer' ]
]

Теперь мы закончили подготовку наших данных, поэтому теперь давайте создадим файл с именем «lib.js»здесь мы поместим нашу функцию для преобразования HEAD в OBJECT KEY и массив BODY в OBJECT VALUE

lib.js

export function arrToObjectData(arrHeader, arrBody) {
const data = arrHeader.reduce((prevValue, curValue, curIndex, arr) => {
return { ...prevValue, [curValue]: arrBody[curIndex] };
}, {});
return data;
}

Мы используем метод сокращения здесь, и мы перебираем массив HEAD и делаем каждое значение индекса массива КЛЮЧОМ ОБЪЕКТА, а также наш массив BODY, мы принимаем каждое значение индекса как наше ЗНАЧЕНИЕ ОБЪЕКТА.

Хотел бы я объяснить лучше 💔.

Теперь давайте импортируем эти функции в наш server.js.

server.js

"use strict";
import fs from "fs";
import { arrToObjectData } from "./lib";

Давайте создадим пустой массив, здесь будут все наши объекты данных. А также мы пройдемся по нашему массиву BODY, чтобы мы могли повторить наш метод arrToObjectData() для длины нашего массива и поместить каждый объект в нашу пустую переменную массива, которую мы создали, и вывести массив из журнала. .

// ...
userDataReadStream.on("end", () => {
const arrayData = rawData.split("\n");
const [stringHeadData, ...arrayBodyData] = arrayData;
const arrayHeadData = stringHeadData.split(",");
const bodyDatas = arrayBodyData.map((body) => body.split(","));
// Create empty array to put all our data object
const userData = [];
// Loop through the BODY array and pass the array at each index to our arrToObjectData method then push it back to our userData empty array variable
for (let i = 0; i < bodyDatas.length; i++) {
userData.push(arrToObjectData(arrayHeadData, bodyDatas[i]));
}
// log the array out
console.table(userData);
});

Результат

┌─────────┬─────┬────────┬────────────┐
│ (index) │ id  │  name  │    job     │
├─────────┼─────┼────────┼────────────┤
│    0    │ '1' │ 'john' │   'web'    │
│    1    │ '2' │ 'wale' │ 'designer' │
│    2    │ '3' │ 'femi' │ 'printer'  │
└─────────┴─────┴────────┴────────────┘

Теперь давайте сохраним объект данных в файл json.

// ...
userDataReadStream.on("end", () => {
//...
// Save the users data to a json file
fs.writeFile(`${process.cwd()}/users_data/userdatas.json`, JSON.stringify(userData), (err) => {
if (err) return console.error(err);
console.log(`Data written successfully`);
});
});

Результат

userdata.json

[
{
"id": "1",
"name": "john",
"job": "web"
},
{
"id": "2",
"name": "wale",
"job": "designer"
},
{
"id": "3",
"name": "femi",
"job": "printer"
}
]

Спасибо за чтение, пожалуйста, прокомментируйте неправильное использование кода и другие.