Prof. Tiago Segato
Até pouco tempo atrás, o JavaScript vivia exclusivamente dentro dos navegadores de internet (como Chrome, Firefox) para criar interatividade em páginas web (o frontend).
Node.js é um ambiente de execução que permite rodar código JavaScript no lado do servidor (no backend).
Isso permitiu que desenvolvedores usassem uma única linguagem (JavaScript) tanto para o frontend quanto para o backend, simplificando o desenvolvimento.
Para escrever nosso código, usaremos um Editor de Código ou IDE (Ambiente de Desenvolvimento Integrado).
Ctrl + ')O VS Code possui um terminal embutido para rodar comandos como:
Imagine que uma aplicação web é um restaurante.
Node.js puro é muito "cru". Seria como construir um carro do zero, fabricando cada parafuso.
É um framework web minimalista e flexível para Node.js. Ele nos fornece um conjunto de ferramentas para construir APIs de forma muito mais rápida e organizada.
Uma rota é um "caminho" em nosso servidor que executa uma função específica. A combinação do método HTTP e do caminho forma o que chamamos de endpoint.
A ação que queremos realizar:
O endereço do recurso:
/tarefas/usuarios/produtosSeguimos convenções para tornar nossa API previsível e fácil de usar.
Enquanto o frontend não existe, como testamos nossa API? Usamos Clientes de API (API Clients).
Vamos construir uma API para gerenciar uma lista de tarefas. Para simplificar, usaremos um array em memória como nosso "banco de dados" inicial.
Este comando cria o arquivo package.json com as configurações padrão.
O arquivo package.json contém as informações do projeto e suas dependências. O node_modules contém os pacotes instalados.
Crie um arquivo index.js com o seguinte código:
Acesse http://localhost:3000 no navegador para verificar se está funcionando.
req.params.id - Captura o parâmetro da URLparseInt() - Converte string para númerofind() - Busca o primeiro elemento que atende à condiçãostatus(404) - Define o código de status HTTP
req.body - Dados enviados no corpo da requisiçãopush() - Adiciona o elemento ao final do arraystatus(201) - Código para "Created" (Criado)
findIndex() - Retorna o índice do elemento encontrado|| - Operador OR: usa o valor existente se o novo for undefinedtypeof - Verifica o tipo da variável
splice(indice, 1) - Remove 1 elemento na posição especificadastatus(204) - Código para "No Content" (Sem Conteúdo)send() - Envia resposta vazia
Use o Postman, Insomnia ou Thunder Client para testar os endpoints que você criou.
http://localhost:3000/tarefas
Operações de banco de dados são assíncronas. O Node.js não espera por elas.
Problema: "Callback Hell" - código aninhado e difícil de ler.
Substitua as funções das rotas pelas versões async que usam os métodos do Sequelize.
Um Middleware é uma função que intercepta o ciclo de requisição-resposta.
Cada middleware é como uma estação em uma linha de produção. A requisição passa por cada estação (middleware) até chegar ao destino final (rota).
app.use()router.use()express.json()cors, helmet
Vamos proteger nossas rotas para que apenas usuários logados possam acessá-las.
usuarioId ao modelo TarefaUsuario.hasMany(Tarefa))Post e Comentario com as devidas associaçõesLivro, Usuario, Emprestimo
Permite que seu frontend (em outro domínio) acesse sua API.
É uma política de segurança dos navegadores que bloqueia requisições entre domínios diferentes por padrão.
Em produção, sempre especifique as origens permitidas. Nunca use * em produção!
Nunca coloque dados sensíveis (senhas, segredos JWT) no código.
.env ao seu arquivo .gitignore.env.example com as variáveis (sem valores)
Criptografa a comunicação. Essencial em produção. Geralmente é gerenciado por um Reverse Proxy como o Nginx.
A prática leva à perfeição. Continue construindo projetos e experimentando novas tecnologias!