ORM Sequelize com database existente do Postgres no Node.js
Neste post irei abordar a utilização do Sequelize com um database existente do Postgres.
Devido a experiências vivenciadas com banco de dados relacionais e percebendo que o mesmo vive no ecossistema do Nodejs resolvi estudar um pouco sobre ORM’s, que dão suporte ao SGDB Postgres.
Após várias pesquisas cheguei no ORM Sequelize, um ORM completo para banco de dados SQL, que atende ao MySql, SQLite, MariaDB e MSSQL.
Verificações de instalações!
Antes de começar é necessário certificar que o Nodejs está instalado. No Postgres iremos trabalhar com duas tabelas conforme figura abaixo:
Tabelas Produto e Setor.
Colocando a mão na massa
Para iniciar o projeto crie o diretório database_existente:
Utilizei o npm init para inicializar o projeto (irá criar o package.json)
Utilizei o “-y” para ignorar perguntas sobre o projeto.
Instalei o Sequelize e também as dependências para o Postgres
E também instalei o framework Express, que é um framework para aplicativo da web do Nodejs mínimo e flexível que fornece um conjunto robusto de recursos para aplicativos web e móvel.
Setup conexão Postgres
Criei uma pasta com nome config
Adicionei um arquivo JSON com o nome config.json, ficando assim:
logging == false desativando o console.log do Sequelize
Estrutura de pastas
Model-view-controller (MVC).
Modelo um lugar para definir estruturas de dados e métodos para interagir com seu armazenamento de dados.
Visão um lugar para gerenciar tudo o que o usuário final vê em sua tela.
Controlador um lugar para receber solicitações de usuários, trazer dados do modelo e repassá-los para a visualização.
Para ficar organizado, incluí uma pasta chamada modulos dentro da raíz do projeto
Conforme figura abaixo:
Schemas
Adicionei o arquivo chamado setor.js dentro do diretório modulos/setor/model/
O arquivo produto.js dentro do diretório modulos/produto/model/
freezeTableName == true sequelize não tentará alterar o nome DAO para obter o nome da tabela. Caso contrário, o nome do modelo será pluralizado;
timestamps == false Não adicionará as colunas createdAt e updatedAt timestamps para o modelo;
classMethods Fornece funções que são adicionadas ao modelo (Model). Se você substituir métodos fornecidos pelo sequelize, você pode acessar o método original usando this.constructor.prototype, This.constructor.prototype.find.apply (this, arguments);
Carregamento dos modelos e conexão do Sequelize com Postgres
Incluí o arquivo modelLoader.js dentro do diretório utils/
Regras e solicitações dos usuários
Criei o arquivo setor.js dentro do diretório modulos/setor/controller/
O arquivo produto.js dentro do diretório modulos/produto/controller/
Caminhos de rota
Criei os roteamentos onde definimos às solicitações do cliente. Para obter uma introdução a roteamento, consulte Roteamento básico.
Incluí o arquivo setor.js dentro do diretório modulos/setor/routes/
O arquivo produto.js dentro do diretório modulos/produto/routes/
Adicionei o arquivo setor.js dentro do diretório modulos/setor/
O arquivo produto.js dentro do diretório modulos/produto/
Iniciando um servidor e escuta a porta 3000 por conexões
Instalei o body-parser que analisa os corpos de solicitação de entrada em um middleware antes de seus manipuladores, disponíveis na propriedade req.body.
Incluí o arquivo app.js dentro da raíz do projeto
Criei uma pasta bin na raíz do projeto.
E o arquivo www dentro do diretório bin/
Prontinho…
Para rodar a api…
Estou disponibilizando o projeto no GitHub e também a documentação das requisições para testes, acesse lá e baixe o mesmo.
Para testar as requisições, utilizo a ferramenta Postman.
Wharley Ornelas
Meu nome é Wharley Ornelas. Desenvolvedor Full-Stack, com mais de 15 anos de experiência de software. Membro ativo em comunidade de desenvolvimento..