Dominando o Node.js
Aprenda a criar aplicações web modernas e escaláveis com Node.js, Express e MongoDB
Descrição do livro
O Node.js é um ambiente de execução que revoluciona o desenvolvimento JavaScript no lado servidor e combina alto desempenho, um stack de linguagem unificado, um rico ecossistema de pacotes e escalabilidade, capacitando os desenvolvedores a construir aplicativos eficientes, escaláveis e versáteis para diferentes casos de uso. O livro Dominando o Node.js conduz você ao longo de uma trajetória de aprendizagem progressiva, começando com os fundamentos e gradualmente avançando para tópicos complexos que lhe proporcionarão as habilidades necessárias para usufruir o Node.js.
Em primeiro lugar, você aprenderá os fundamentos do Node.js e atualizará o conhecimento do JavaScript antes de prosseguir para o desenvolvimento de modernos aplicativos web usando o Node.js, a Express e o MongoDB. Além disso, explorará e adquirirá prática em tópicos complexos tais como programação assíncrona, bibliotecas npm, padrões baseados em eventos para servidores HTTP, APIs RESTful e JSON Web Tokens. Os últimos capítulos o conduzirão ao longo do processo de implementação, oferecendo visões sobre diversas estratégias, tais como configurações de servidores físicos dedicados (bare metal), máquinas virtuais e conteinerização com o Docker. Para obter maior eficiência na gestão de processos, você aprenderá também sobre o uso do Process Manager 2 (PM2).
Ao final deste livro, você terá adquirido as habilidades necessárias para criar, testar e implementar aplicativos web Node.js com confiança e usar esse stack poderoso em projetos do dia a dia.
Você aprenderá a:
• Construir aplicativos Node.js sólidos e seguros a partir do zero
• Usar e publicar pacotes npm com eficiência
• Dominar padrões para refatorar e aprimorar aplicativos ao longo do tempo
• Entender profundamente os princípios essenciais de desenvolvimento web, inclusive HTTP, projeto de APIs RESTful, JWT, autenticação, autorização e solução de erros
• Implementar estratégias de teste robustas para melhorar a qualidade e a confiabilidade dos aplicativos
• Usar o Docker e o PM2 para implementar aplicativos Node.js em ambientes de produção
Ver menos ▲Sumário
- Prefácio
- Parte I: Visão geral do Node js e linguagem JavaScript
- Capítulo 1: Introdução ao Node js
- Requisitos técnicos
- Por que o Node js é tão popular?
- Leve e veloz
- Multiplataforma e multifuncional
- Fácil curva de aprendizado
- Ecossistema
- Movido pela comunidade
- A arquitetura de threads únicas do Node js
- A operação de E/S precisa ser feita de forma diferente
- E/S sem bloqueio
- Aprofundando um pouco mais no event loop
- Versões do Node js
- Versionamento semântico (SemVer)
- Detalhes da versão
- Cronograma de lançamento de versões
- Resumo
- Outras leituras
- Capítulo 2: Como configurar o ambiente de desenvolvimento
- Requisitos técnicos
- Como instalar o Node js no macOS, Windows e Linux
- macOS
- Windows
- Linux
- Outros ambientes
- Como verificar a instalação
- Como gerenciar as versões do Node js
- Como gerenciar o Node js usando o nvm
- Como instalar e usar versões
- Como usar um arquivo .nvmrc
- REPL do Node js
- Como interagir com JavaScript usando o Chrome DevTools
- Painel Console
- Painel Rede
- Como usar o Chrome DevTools
- Resumo
- Outras leituras
- Capítulo 3: Fundamentos do JavaScript
- Requisitos técnicos
- JavaScript é uma linguagem poderosa
- Entendendo o versionamento – TC39
- Entendendo o versionamento – ECMAScript
- O que está incluído na próxima versão do JavaScript?
- O que não está incluído na especificação do JavaScript?
- Explorando a documentação do JavaScript
- Como usar o linting em códigos JavaScript
- Como comentar códigos JavaScript
- Como usar JSDoc
- Impressão de valores e depuração
- Variáveis e constantes
- Convenções de nomenclatura
- let versus const
- Entendendo tipos de dados
- undefined
- object
- boolean
- number
- string
- function
- bigint
- symbol
- Explorando números
- Operadores aritméticos
- Operadores de atribuição
- Métodos úteis
- Objeto Math
- Outros números
- Explorando o objeto Date
- Instruções condicionais
- Operadores de comparações matemáticas
- Operadores de igualdade
- Operadores lógicos
- Operador NOT (!)
- Igualdade no JavaScript
- Operador de coalescência nula (??)
- Instrução if
- Instrução switch
- Operador ternário
- Entendendo loops
- while
- do...while
- Como usar strings no JavaScript
- Métodos importantes
- Explorando arrays
- Operações básicas
- Como iterar em um array
- Desestruturação
- Sets
- Como usar objetos no JavaScript
- Operações básicas
- Iteração
- Cópia superficial versus cópia profunda
- Como mesclar objetos
- Desestruturação
- Encadeamento opcional (? )
- Explorando funções
- Fundamentos
- Funções de seta
- Closures
- Como criar e gerenciar classes
- Como criar uma classe
- Métodos de classes
- Como ampliar classes
- Métodos estáticos
- Getters e setters
- Resumo
- Outras leituras
- Capítulo 4: Programação assíncrona
- Requisitos técnicos
- Programação assíncrona em JavaScript
- A atitude assíncrona
- Entendendo callbacks
- Temporizadores e intervalos
- Callbacks do tipo “erro em primeiro lugar”
- Inferno dos callbacks
- Como dominar promises
- Como usar promises
- Como criar promises
- Inferno de callbacks com promises
- Promises paralelas
- Como lidar com erros
- Encadeamento de promises
- Como usar async e await para trabalhar com códigos assíncronos
- async
- await
- IIFEs
- Resumo
- Outras leituras
- Parte II: Ecossistema e arquitetura do Node js
- Capítulo 5: Principais bibliotecas do Node js
- Requisitos técnicos
- Como modularizar códigos (ESM versus CJS)
- CommonJS (CJS)
- ECMAScript Modules (ESM)
- Como a interoperabilidade funciona
- Como estruturar as principais bibliotecas
- A estrutura das bibliotecas
- Índice de estabilidade
- Outras bibliotecas principais
- Opções de linhas de comando
- Resumo
- Outras leituras
- Capítulo 6: Módulos externos e npm
- Requisitos técnicos
- Como gerenciar o aplicativo com package json
- Como escolher as dependências corretas para seu projeto
- Riscos
- Bons critérios
- Como instalar dependências
- Em nível local ou global
- Dependência ou dependência de desenvolvimento
- Como adicionar uma nova dependência
- Como instalar todas as dependências
- Como remover dependências
- Entendendo o package-lock json
- Como gerenciar versões de dependências
- Dependências desatualizadas
- Como construir um JavaScript isomórfico
- Como usar scripts do npm
- Como executar pacotes diretamente com NPX
- Alternativas ao npm
- Yarn
- PNPM
- Verdaccio
- Como publicar seu primeiro pacote
- Registros
- Conta npm
- Como preparar o pacote
- Como revisar o pacote
- Como publicar o pacote
- Evite pacotes com escopo
- Como lançar novas versões
- Como prevenir a publicação acidental
- Melhores práticas
- Resumo
- Outras leituras
- Capítulo 7: Arquitetura baseada em eventos
- Requisitos técnicos
- Introdução a eventos
- Como observar alterações em arquivos
- Biblioteca de emissores de eventos do Node js
- Como organizar os ouvintes para prevenir o caos
- Como remover ouvintes quando não forem necessários
- Seu primeiro servidor HTTP
- Como adicionar uma camada de eventos aos seus módulos
- Resumo
- Outras leituras
- Capítulo 8: Realização de testes no Node js
- Requisitos técnicos
- Por que é importante realizar testes?
- A realização de testes é uma cultura complexa
- A realização de testes precisa ser uma atividade em equipe
- Desfrute deles agora mesmo
- Abordagem e filosofia dos testes
- Testes são amplamente utilizados no mundo
- Pirâmide de testes
- Como faço para testar meus códigos?
- Frameworks e bibliotecas
- Nosso primeiro teste
- Princípios e objetivos dos testes
- Como escrever nosso primeiro conjunto de testes
- Modulo utils
- Biblioteca principal para testes
- Como usar a biblioteca Jest
- Como dominar as ferramentas de cobertura de códigos
- Configuração
- Como executar os testes
- Relatório do Node js
- TDD em ação
- Resumo
- Outras leituras
- Parte III: Fundamentos dos aplicativos web
- Capítulo 9: Como trabalhar com APIs HTTP e REST
- Requisitos técnicos
- Como a internet funciona nos bastidores
- História da internet
- Infraestrutura da internet
- Solicitação de comentários (RFC)
- HTTP - relação servidor/cliente
- Solicitação e resposta
- Renderização no lado servidor
- Aplicativos de página única (SPAs)
- Como dominar o HTTP
- Cabeçalhos HTTP
- Códigos de status
- Métodos de solicitação
- Payloads do HTTP
- Versões do HTTP
- Como usar URLs em aplicativos web
- APIs REST, em poucas palavras
- Explorando a especificações do JSON
- Como depurar solicitações HTTP
- Resumo
- Outras leituras
- Capítulo 10: Como criar aplicativos web com Express
- Requisitos técnicos
- Familiarizando-se com a biblioteca Express
- Como instalar a Express
- Hello World
- Como usar o gerador
- Depuração
- Entendendo os processadores de modelos
- Como escolher um processador de modelos
- Como renderizar um modelo
- Entendendo o processo
- Como dominar solicitações
- Métodos HTTP
- Rotas
- Manipuladores
- Como dominar respostas
- Como trabalhar com cabeçalhos
- Códigos de status
- Redirecionamentos
- Como enviar dados
- Como enviar arquivos
- Como usar o padrão de middleware
- Entendendo o escopo
- Anatomia do middleware
- Como adicionar middlewares ao aplicativo
- Como adicionar middlewares a uma rota
- Middlewares comuns utilizados na Express
- Como usar middlewares de terceiros
- Resumo
- Outras leituras
- Parte IV: Como construir aplicativos web sólidos com Node js
- Capítulo 11: Como criar um projeto de aplicativo web a partir do zero
- Requisitos técnicos
- Início do projeto
- Objetivo do projeto
- Primeiros passos
- Como construir uma API REST
- Como adicionar rotas
- Como adicionar os armazenamentos
- Como adicionar arquivos estáticos
- Como adicionar os modelos
- Como realizar testes com a supertest
- Como adicionar armazenamentos ao servidor
- Como criar utilitários de testes
- Como adicionar testes do servidor
- Análise do resultado final do projeto
- A página Sobre
- Vamos comemorar!
- Próximos passos
- Resumo
- Capítulo 12: Persistência de dados com o MongoDB
- Requisitos técnicos
- O que é o MongoDB?
- Versões
- Como configurar o MongoDB
- Como instalar o Docker
- Como executar o MongoDB com um contêiner
- Como executar o MongoDB com Docker Compose
- Como adicionar comandos Docker ao package json
- Como se conectar ao MongoDB
- Outras maneiras de instalar o MongoDB
- Como carregar secrets no Node js
- Variáveis de ambiente
- Arquivo .env
- dotenv
- Como usar um ORM – Mongoose
- Como migrar um aplicativo web para o MongoDB
- Como instalar dependências
- Como lidar com secrets
- Como migrar a camada de dados
- Como testar a camada de integração do MongoDB
- Como atualizar utilitários
- Como refatorar o conjunto de testes
- Necessidade de alterar alguns testes
- Como verificar a cobertura
- Resumo
- Outras leituras
- Capítulo 13: Autenticação e autorização de usuários com Passport js
- Requisitos técnicos
- Entendendo os modernos mecanismos de autenticação e autorização
- Autenticação
- Autorização
- JWT em poucas palavras
- Processo
- Teoria
- Criptografia 101
- Estrutura JWT
- JWT io
- Entendendo os fundamentos do Passport js
- Como adicionar autenticação e autorização a um aplicativo web
- Clonagem do projeto base
- Configuração
- Execute os testes
- Alterações na IU
- Dependências adicionadas
- Alterações no front-end
- Adição de um novo armazenamento para usuários
- Utilitários JWT
- Como adicionar novas rotas
- Melhores utilitários para a realização de testes
- Alterações nos casos de testes
- Cobertura de testes
- Resumo
- Outras leituras
- Capítulo 14: Solução de erros no Node js
- Requisitos técnicos
- Explorando os tipos de erros
- Erros de sintaxe
- Erros de execução
- Como acusar erros expressivos
- Objeto erro
- Erros customizados
- Como lidar com erros na Express
- Middleware para correção de erros
- Erros customizados
- Como desligar ou encerrar o aplicativo perfeitamente
- Eventos
- Códigos de saída
- Como evitar processos zumbis
- Resumo
- Outras leituras
- Capítulo 15: Proteção de aplicativos web
- Requisitos técnicos
- A importância da segurança
- Engenharia social
- Riscos na cadeia de suprimentos
- Impacto nos negócios
- Segurança: por onde começar
- Visão geral sobre o OWASP Top 10
- CWE
- CVE
- Modelo de ameaças do Node js
- Recomendações oficiais do Node js
- Como melhorar a segurança dos aplicativos
- Ponha em prática
- Como se tornar um hacker ético
- Programas de recompensas
- Como adquirir habilidades
- Resumo
- Outras leituras
- Parte V: Como dominar a implementação e a portabilidade do Node js
- Capítulo 16: Implementação de aplicativos Node js
- Requisitos técnicos
- Definição dos requisitos
- Como usar um repositório GitHub
- Como criar um repositório GitHub
- Como transferir o código para o repositório
- Integração contínua com o GitHub Actions
- Como usar o MongoDB Atlas
- Como implementar aplicativos Node js com o PM2
- Como criar um Droplet da DigitalOcean
- Como se conectar à máquina
- Como preparar a máquina
- Como clonar o repositório
- Como instalar as dependências
- Como preparar o ambiente
- Como gerenciar o aplicativo com o PM2
- Como acessar o aplicativo
- Resumo
- Outras leituras
- Capítulo 17: Como dockerizar um aplicativo Node js
- Requisitos técnicos
- Contêineres e soluções nativas em nuvem com o Docker
- Ciclo de vida do Docker
- Como dockerizar o aplicativo
- Como gerenciar o aplicativo com o Docker
- Como adicionar o docker build à integração contínua
- Como transferir a imagem para o Docker Hub
- Como publicar a imagem com o GitHub Actions
- Como executar contêineres
- Como usar o Cloudflare
- Próximo nível – princípios dos aplicativos de 12 fatores
- Limpeza
- Resumo
- Outras leituras
- Índice remissivo
Sobre o autor
Ulises Gascón é membro da Express Technical Committee (TC), bem como um dos principais colaboradores e produtores de material sobre Node.js. Com mais de 10 anos de experiência como engenheiro de software, tem trabalhado para empresas proeminentes, tais como o Google e a IBM, bem como para várias firmas de consultoria e startups.… Ver perfil completo ▶






