Visão Geral do Módulo
Neste módulo, você aprenderá a utilizar o Node.js para desenvolvimento backend, criando aplicações e APIs robustas com JavaScript. Vamos explorar o ecossistema Node.js, o framework Express, e como construir aplicações completas do lado do servidor.
Conteúdo Programático
1. Introdução ao Node.js
- O que é Node.js
- História e evolução do Node.js
- Arquitetura e funcionamento interno
- V8 JavaScript Engine
- Event Loop
- Non-blocking I/O
- Single-threaded, mas escalável
- Instalação e configuração do ambiente
- Node Version Manager (NVM)
- Executando scripts JavaScript com Node.js
- REPL (Read-Eval-Print Loop)
- Casos de uso e aplicações do Node.js
2. Módulos e NPM
- Sistema de módulos no Node.js
- CommonJS
- ES Modules
- Diferenças e compatibilidade
- Criando e exportando módulos
- Importando módulos
- Módulos nativos do Node.js
- NPM (Node Package Manager)
- Instalação e uso básico
- package.json
- Dependências e devDependencies
- Versionamento semântico
- Scripts NPM
- Gerenciadores de pacotes alternativos (Yarn, pnpm)
- Publicando pacotes no NPM
3. Módulos Nativos do Node.js
- fs (File System)
- Operações síncronas vs. assíncronas
- Leitura e escrita de arquivos
- Manipulação de diretórios
- Streams de arquivos
- path
- Manipulação de caminhos de arquivos
- Resolução de caminhos
- Normalização de caminhos
- http/https
- Criação de servidores HTTP
- Requisições HTTP
- Manipulação de cabeçalhos e cookies
- url e querystring
- Parsing de URLs
- Manipulação de parâmetros de query
- events
- EventEmitter
- Criação e manipulação de eventos
- util
- Utilitários diversos
- Promisify
- buffer
- Manipulação de dados binários
- stream
- Streams de leitura e escrita
- Pipes
- Transform streams
4. Programação Assíncrona em Node.js
- Callbacks
- Padrão de callback no Node.js
- Error-first callbacks
- Callback hell e suas soluções
- Promises
- Criação e consumo de Promises
- Encadeamento de Promises
- Promise.all, Promise.race, Promise.allSettled
- Tratamento de erros com Promises
- Async/Await
- Sintaxe e uso
- Tratamento de erros com try/catch
- Execução paralela vs. sequencial
- Melhores práticas
- Util.promisify
- Event Loop em detalhes
- Microtasks e Macrotasks
- Evitando bloqueios no Event Loop
5. Express.js
- Introdução ao Express.js
- Instalação e configuração básica
- Roteamento
- Métodos HTTP (GET, POST, PUT, DELETE, etc.)
- Parâmetros de rota
- Query parameters
- Organização de rotas
- Middleware
- Conceito e funcionamento
- Middleware de aplicação
- Middleware de rota
- Middleware de erro
- Middleware de terceiros
- Processamento de requisições
- Body parsing (express.json, express.urlencoded)
- Manipulação de formulários
- Upload de arquivos (multer)
- Respostas
- Formatos de resposta (JSON, HTML, etc.)
- Status codes
- Headers
- Redirecionamentos
- Templates engines
- EJS, Pug, Handlebars
- Renderização de views
- Layouts e partials
- Servindo arquivos estáticos
- Tratamento de erros
- Configuração de ambientes (development, production)
6. Autenticação e Autorização
- Sessões e cookies
- express-session
- cookie-parser
- Armazenamento de sessões
- Autenticação baseada em tokens
- JWT (JSON Web Tokens)
- Geração e verificação de tokens
- Armazenamento de tokens
- Estratégias de autenticação
- Local (username/password)
- OAuth
- Passport.js
- Autorização
- Controle de acesso baseado em funções (RBAC)
- Middleware de autorização
- Proteção de rotas
- Segurança
- Hashing de senhas (bcrypt)
- Proteção contra ataques comuns
- Helmet.js
- Rate limiting
7. Integração com Banco de Dados
- Conexão com bancos de dados
- MySQL/MariaDB
- PostgreSQL
- MongoDB
- SQLite
- ORMs e ODMs
- Sequelize (SQL)
- Mongoose (MongoDB)
- Prisma
- TypeORM
- Query builders
- Knex.js
- Migrations e seeds
- Transações
- Padrões de acesso a dados
- Repository pattern
- Data Access Object (DAO)
- Caching de dados
8. Testes em Node.js
- Tipos de testes
- Testes unitários
- Testes de integração
- Testes end-to-end
- Frameworks de teste
- Jest
- Mocha
- Chai
- Mocking e stubbing
- Sinon.js
- Nock
- Mock de módulos
- Testes de API
- Supertest
- Postman/Newman
- Test-Driven Development (TDD)
- Cobertura de testes
- Integração contínua
9. Logging, Monitoramento e Depuração
- Logging
- Console.log e suas limitações
- Bibliotecas de logging (Winston, Pino)
- Níveis de log
- Formatação de logs
- Rotação de arquivos de log
- Monitoramento
- Métricas de aplicação
- Monitoramento de saúde
- Ferramentas de APM (Application Performance Monitoring)
- Depuração
- Node.js Debugger
- Depuração com VS Code
- Depuração remota
- Profiling
- Memory leaks
- Tratamento de erros
- Captura e registro de exceções
- Erros assíncronos
- Middleware de erro no Express
- Centralização de tratamento de erros
10. Deployment e Boas Práticas
- Preparação para produção
- Variáveis de ambiente
- Configuração baseada em ambiente
- Segurança
- Performance
- Process managers
- PM2
- Forever
- Nodemon (desenvolvimento)
- Containerização
- Docker
- Docker Compose
- Kubernetes
- Plataformas de deployment
- Heroku
- AWS
- Google Cloud
- Azure
- Vercel
- Netlify
- CI/CD (Integração Contínua/Entrega Contínua)
- Escalabilidade
- Balanceamento de carga
- Cluster module
- Arquitetura de microsserviços
- Boas práticas
- Estrutura de projeto
- Convenções de código
- Documentação
- Versionamento semântico
Exercícios Práticos
Para fixar os conceitos aprendidos neste módulo, recomendamos a realização dos seguintes exercícios:
- Crie um servidor HTTP básico com Node.js nativo que responda a diferentes rotas.
- Desenvolva uma API REST completa para gerenciar produtos usando Express.js.
- Implemente autenticação JWT em sua API de produtos.
- Integre sua API com um banco de dados MySQL usando Sequelize.
- Adicione validação de dados nas rotas de criação e atualização de produtos.
- Implemente um sistema de logging para sua aplicação.
- Crie testes unitários e de integração para sua API.
- Implemente tratamento de erros centralizado em sua aplicação Express.
- Adicione documentação Swagger à sua API.
- Configure sua aplicação para diferentes ambientes (desenvolvimento, teste, produção).
Pronto para avançar?
Após dominar os conceitos de Node.js, você estará preparado para avançar para o próximo módulo.
Próximo Módulo: Noções de Banco de Dados