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.

Carga Horária

24 horas

Pré-requisitos

Módulos 1 a 5

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:

  1. Crie um servidor HTTP básico com Node.js nativo que responda a diferentes rotas.
  2. Desenvolva uma API REST completa para gerenciar produtos usando Express.js.
  3. Implemente autenticação JWT em sua API de produtos.
  4. Integre sua API com um banco de dados MySQL usando Sequelize.
  5. Adicione validação de dados nas rotas de criação e atualização de produtos.
  6. Implemente um sistema de logging para sua aplicação.
  7. Crie testes unitários e de integração para sua API.
  8. Implemente tratamento de erros centralizado em sua aplicação Express.
  9. Adicione documentação Swagger à sua API.
  10. 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