Dominando o Node.js

Aprenda a criar aplicações web modernas e escaláveis com Node.js, Express e MongoDB

Dominando o Node.js
× Dominando o Node.js

Dominando o Node.js

Compartilhar

Autor: Ulises Gascón

ISBN impresso: 978-85-7522-947-7
ISBN ebook: 978-85-7522-948-4
Ano: 2025
Páginas: 336
Preço impresso: R$ 115,00 O ebook deste livro está disponível na Amazon.

Opine sobre este livro

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
Ver sumário completo ▼

Sobre o autor

Ulises Gascón

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 ▶