O documento discute a implementação de persistência de dados em um projeto Node.js usando arquivos e bancos de dados MySQL e MongoDB. Ele aborda módulos, persistência em arquivos, segurança de senhas com bcrypt, uso do MySQL com queries e ORM Sequelize e próximos passos do projeto.
2. Projeto da Aula
• Nessa aula continuaremos o projeto desenvolvido nas duas aulas
anteriores
• Nós vamos implementar a camada de persistência com:
• Arquivos
• Banco de Dados Relacionais
• MySQL (SQL e ORM)
• Banco de Dados Não Relacionais
• MongoDB (API e Mongoose)
3. Algo Sobre Módulos
• Quando um módulo é importado, seu conteúdo é guardado em cache
• Exemplo 1 – Exportando um objeto (singleton):
let contador = 0;
module.exports = {contador: contador++};
• Em cada uso o valor do contador vai ser o mesmo.
• Exemplo 2 – Exportando uma função (nova instância por import):
let contador = 0;
module.exports = () => {return {contador: contador++}};
• Em cada uso o valor do contador vai ser incrementado.
6. E por que essa mudança de assunto ?
• É para a gente entender os módulos de persistência
• Já que um módulo é carregado apenas uma vez, nós podemos:
• Colocar código de inicialização
• Podemos guardar estado em um módulo:
• Esse estado será compartilhado em qualquer local do projeto
• É possível criar um módulo de constantes, valores globais, etc
13. Próximos Passos
• Vamos criar um script: repositores/UsuarioRepository.js
• Com as funções para armazenar e recuperar usuários
• Vamos criar outro script: controllers/usuários.js
• Com os endpoints para criar usuários
• Antes de tudo !
• Já que vamos armazenar os dados dos usuários, é bom evitar a duplicação de
código
• Então, vamos criar um script util/persistencia.js
• Vamos modificar o script repositories/LivrosRepository.js
16. Copiar e Colar do LivrosRepository
Encontrar e Substituir ;)
20. Problema !
• Nosso sistema está armazenando as senhas não criptografadas !
• Isso é muito grave
• Apenas o hash da senha é que deve ser armazenado
• Hash é uma função não reversível
• h(x) = y h-1(y) ≠ x
• Ou seja, se alguém invadir o servidor e acessar o banco de dados, não
é possível descobrir quais são as senhas
• Sistemas que, quando você diz que esqueceu a senha, ele te envia a
senha descriptografada, são sistemas com a segurança muito ruim
21. Solução
• Vamos usar o pacote bcrypt
• Para instalar: npm i --save bcrypt
• Antes de armazenar a senha nós a encriptamos (guarda o hash)
• Quando formos fazer o login, nós encriptamos a senha entrada e a
comparamos com a senha armazenada (hash)
• Vamos adicionar algumas funções no módulo util/seguranca.js