Nesse documento vamos aprender a importar arquivos CSV (Comma Separated Values) utilizando Node.js e uma biblioteca chamada csv-parse.

O que são arquivos .csv?

Arquivos .csv são exportados através de softwares de planilhas e utilizam um formato semelhante ao seguir:

name, country, age
Diego, Brazil, 25
John, Russia, 31
Carla, Mexico, 41

Perceba que a primeira linha (opcional) descreve o título dos parâmetros e as demais linhas identificam os valores de cada informação.

Baseado na informação acima entendemos que existem 3 usuários que poderiam ser convertidos para objetos no JavaScript para facilitar o entendimento:

[
  { name: 'Diego', country: 'Brazil', age: 25 },
  { name: 'John', country: 'Russia', age: 31 },
  { name: 'Carla', country: 'Mexico', age: 41 }
]

Agora que temos o conhecimento necessário para interpretar os dados contidos em um arquivo CSV precisamos saber como ler as informações contidas dentro de um no Node.js.

Lendo arquivos CSV

Existem milhares (literalmente) de formas para lermos um arquivo CSV no Node.js e converter seus dados em objetos do JavaScript. Podemos utilizar o módulo nativo de arquivos do Node.js, o fs ou utilizar alguma biblioteca específica pra isso.

Uma das ferramentas mais fantásticas pra realizar esse processo, na minha opinião, é o csv-parse (https://www.npmjs.com/package/csv-parse), mas por que?

Essa biblioteca consegue ler o arquivo CSV por partes, sem precisar lê-lo todo de uma só vez, otimizando o uso de memória do nosso servidor e processamento. Esse processo "por partes" consegue ser realizado graças a uma funcionalidade que o Node.js possui que são as streams.

<aside> 💡 Streams são formas de recebermos ou enviarmos dados por partes sem precisarmos saber exatamente quando essa mensagem vai terminar, nos preocupamos apenas em ler/escrever os dados assim que disponíveis.

Assim, mesmo que a quantidade de dados seja imensa, pro nosso servidor importa apenas uma pequena parte desses dados, tornando tudo mais leve.

Você pode comparar isso com o processo do Youtube onde você não precisa baixar o vídeo completo pra assistir e sim apenas um pequeno pedaço.

</aside>

Arquivo de exemplo

Para exemplificarmos a leitura de um arquivo .csv baixe o arquivo abaixo e mantenha-o dentro de uma pasta qualquer da sua aplicação Node.js:

import_template.csv

Configurando csv-parse

Instale o csv-parse utilizando o Yarn ou NPM e depois disso crie um arquivo TypeScript que vai importar seu CSV:

import csvParse from 'csv-parse';
import fs from 'fs';
import path from 'path';

const csvFilePath = path.resolve(__dirname, 'import_template.csv');

const readCSVStream = fs.createReadStream(csvFilePath);