Criando e autenticando usuários com NodeJS — #01
Depois de passar dias procurando um tema para escrever sobre, percebi que existem poucos tutoriais “fáceis” abordando o tema.
O que será feito por aqui?
Utilizaremos NodeJS e alguns módulos existentes por aí, como o Express, Mongoose, Bcrypt e o JWT para criar e autenticar usuários e proteger recursos da nossa aplicação.
Criando o projeto
Aqui, estamos criando um diretório com o comando mkdir, abrindo o mesmo com o comando cd e iniciando o projeto com o comando npm init.
Esse comando cria o package.json, que contém informações referentes ao nosso projeto, tais como nome, versão, dependências e afins.
Preparando o ambiente
Abrindo o package.json, temos, dentre outras informações, como dito anteriormente, a relação de dependências necessárias para rodarmos o projeto.
Caso você tenha o arquivo, basta rodar o comando npm install e elas serão instaladas automaticamente, caso contrário, basta rodar npm install nome-do-pacote. As dependências ficam na pasta node_modules.
As “devDependencies”, são as dependências que serão utilizadas em ambiente de desenvolvimento, no nosso caso, temos o nodemon, um módulo que fica “escutando” alterações nos arquivos do servidor e, quando encontra, dá um restart.
Estrutura do projeto
O nosso “ponto de entrada” do projeto será o arquivo index.js, mas falaremos sobre ele mais adiante.
O projeto conta com um diretório de configuração, onde, obviamente, ficam os arquivos de configuração (teremos um arquivo para a configuração do banco de dados (database.js), outro para o servidor (express.js)e outra para o jwt (jwt.js)).
O diretório server conta com uma estrutura parecida com o modelo MVC, contando com um outro diretório para as rotas (routes) e outro para scripts úteis que irão nos ajudar com coisas específicas (utils).
Configurações do projeto
Configuração do banco de dados
Como dito, dentro da pasta config ficarão os arquivos de configuração do nosso projeto. Trabalharemos primeiro no arquivo de configuração do banco de dados, denominado database.js.
Na primeira linha, temos a importação do módulo do mongoose e, abaixo, dizemos pro mongoose utilizar as promises do NodeJS como padrão.
O método “connect” faz a conexão em si. Você deve substituir a string “sua-url” pela string de conexão com o seu banco de dados. Em geral, essa string segue o padrão “mongodb://usuario:senha@servidor:porta/nome-do-banco”.
Abaixo estamos apenas ouvindo alguns eventos que ocorrem em conexão de conexão ou erro, por exemplo.
Configuração do Express
Trabalharemos agora no arquivo express.js.
Bem, importaremos os módulos necessários e exportaremos a função de configuração que retorna a variável “app”. Essa variável será utilizada em outras partes da nossa aplicação, sempre que precisarmos da instância do Express, que representa a aplicação em si.
O body-parser é quem trata as requisições e disponibiliza o objeto“req.body” para podermos trabalhar mais facilmente com os dados que são enviados para nossas rotas. Já o cosign é quem faz o autoload dos nossos scripts e injeta na nossa instância.
Configurando do JWT
Por último, mas não menos importante, o JWT. Trabalharemos no arquivo jwt.js
Aqui nós não temos muita coisa, apenas configuramos a palavra secreta que será utilizada para verificar o nosso token.
Configurando o nosso ponto de entrada
Agora, vamos escrever o nosso arquivo index.js, que será o ponto de entrada da aplicação.
Importamos a configuração do Express e atribuímos à variável “app” e também importamos a configuração do nosso banco de dados.
Abaixo, utilizando a variável “app”, levantamos o servidor utilizando o método “listen”, passando a porta que foi definida na configuração do Express e uma função de callback, que apenas imprime uma mensagem no terminal.
Com isso, temos o nosso servidor configurado e rodando.
No próximo artigo, iremos escrever os models, controllers e rotas para possibilitar o cadastro de usuários.