Back-End

23 mai, 2019

Nodejs + MongoDB: exportando dados para um arquivo .csv

Publicidade

Veja neste artigo como criar uma rota no seu projeto Node.js com express para exportar os seus dados para um arquivo .csv.

Nodejs exportando dados para arquivo .csv

Fazendo um processo inverso ao que demonstrei no artigo: “Node.js: importando dados de um arquivo .csv para o MongoDB“, hoje demonstrarei como gerar um arquivo .csv a partir de uma base de dados MongoDB utilizando uma API desenvolvida em Node.js.

Para pular a etapa de criação de um novo projeto, irei utilizar um que eu desenvolvi a partir do projeto demonstrado no artigo: “Node + Mongo e Redis“.

Caso tenha interesse em clonar esse projeto, acesse-o no meu GitHub:

Analisando esse projeto, nós temos:

  • config/db.js: conexão com o banco de dados
  • controllers/characterController.js: Arquivo configurado com as rotas do projeto
  • exports: nesse diretório iremos gerar os arquivos .csv
  • infra/exportTocsv.js: método que iremos utilizar para passar o retorno das pesquisas do nosso banco de dados para exportar para um arquivo .csv
  • models/character.js: model do nosso projeto, nesse nós temos duas propriedades: name e thumb
  • repositories/characterRepository.js: arquivo de mapeamento da nossa model com a nossa collection no mongodb
  • routes/characterRoute.js: arquivo contendo as rotas da nossa CharacterController
  • services/characterService.js: arquivo que iremos utilizar para gerenciar os nossos dados (CRUD) com o nosso db
  • uploads: diretório contendo algumas imagens
  • program.js: arquivo de start do projeto
  • startUp.js: arquivo middler das chamadas do projeto

Conforme mencionado acima, eu desenvolvi um projeto final para este artigo a partir do projeto detalhado no passo anterior. A seguir você verá os arquivos que foram alterados para esse artigo.

  • characterController.js: rota que usaremos para o exporte.
exports.exportToCsv = (req, res) => {
    CharacterService.getAll()
        .then((characters) => {
            let filename = ExportData.tocsv(characters);
            res.download("./exports/" + filename);

        }).catch(err => res.status(500).send(err))
}

Essa chamada está com uma pesquisa retornando todos os registros do nosso banco de dados, passando para o método exportTocsv e fazendo download do arquivo

  • exportTocsv.js: function desenvolvida para gerar o arquivo a partir do retorno do nosso banco de dados.
  const csv = json2csv(characters, opts);
        const filename = uuid.v4() + ".csv"
        fs.writeFile('./exports/' + filename, csv, function (err) {
            if (err) throw err;
            console.log('file saved');
        });

        return filename;

Nesse arquivo nós temos uma function chamada tocsv que está utilizando a biblioteca json2csv. Essa biblioteca tem um método chamado json2csv, que recebe dois parâmetros (os dados que desejamos exportar, fields dos nossos dados).

  • startUp.js: foi adicionada uma config para fazermos download de um arquivo estático de dentro da estrutura da nossa API.
app.use('/uploads', express.static(process.cwd() + '/uploads'))
app.use('/exports', express.static(process.cwd() + '/exports'))

Nessa config nós estamos dando permissão de download para os arquivos que estão dentro dos diretórios exports e uploads.

Exportando os dados

A API que eu irei utilizar neste artigo está conectada com um db que eu cadastrei algumas informações sobre os personagens da série (GOT) Game of Thrones.

Caso tenha interesse em saber a fonte desses dados, segue o link de uma API contendo as informações que eu irei utilizar neste artigo:

Agora, para testar o exportar dos dados eu irei abrir um projeto em um terminal e executar o comando abaixo:

npm start

Esse comando irá executar o projeto no endereço: http://localhost:3000/.

Observação: caso esteja utilizando o mesmo projeto que eu apresentei no inicio do artigo, eu estou utilizando um projeto demonstrando no artigo node-mongo-redis. Para esse projeto rodar nós, precisamos estar com o MongoDB e o Redis instalados em nosso computador.

Node + mongo + redis

Agora, para exportar nossos dados basta abrir a rota /characters/export/tocsv. Abaixo você tem uma imagem demonstrando esse passo:

nodejs exportando dados para um arquivo .csv

Caso tenha interesse em baixar o arquivo .csv gerado nesse passo anterior para dar uma carga no seu banco de dados, segue o seu link:

Bom, a ideia deste artigo era mostrar como exportar os dados de um banco de dados MongoDB utilizando um API desenvolvida em Node.js com Express.

Caso precise criar mais filtros, basta utilizar a mesma lógica da rota demonstrada no passo anterior com os seus filtros.

Espero que tenham gostado e até um próximo artigo, pessoal!