Simon Holmes Novatec
Original English language edition published by Manning Publications Co., Copyright 2014 by Manning Publications. Portuguese-language edition for Brazil copyright 2016 by Novatec Editora. All rights reserved. Edição original em Inglês publicada pela Manning Publications Co., Copyright 2014 pela Manning Publications. Edição em Português para o Brasil copyright 2016 pela Novatec Editora. Todos os direitos reservados. Novatec Editora Ltda. 2016. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates PY20160329 Tradução: Henrique Cesar Ulbrich Revisão gramatical: Smirna Cavalheiro Assistente editorial: Priscila A. Yoshimatsu Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-491-5 Histórico de impressões: Abril/2016 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
Sumário Prefácio... 9 Agradecimentos...12 Sobre este livro...14 Parte I As primeiras coisas primeiro... 18 Capítulo 1 Introdução ao desenvolvimento em full-stack...19 1.1 Mas por que eu deveria aprender a desenvolver em full-stack?... 20 1.2 Uma introdução ao Node.js: um servidor/plataforma web... 25 1.3 Express: o Framework... 31 1.4 MongoDB: o Banco de Dados... 32 1.5 AngularJS: o framework para o front-end... 36 1.6 Elenco de apoio... 40 1.7 Juntando tudo em um exemplo prático... 43 1.8 Resumo... 46 Capítulo 2 Projetando uma arquitetura baseada em MEAN...47 2.1 A arquitetura mais comum usada com o MEAN... 47 2.2 Além das SPAs... 49 2.3 Projetando uma arquitetura MEAN flexível... 54 2.4 Planejando uma aplicação no mundo real... 62 2.5 Desmembrando o desenvolvimento em estágios... 69 2.6 Arquitetura de hardware... 78 2.7 Resumo... 81 Parte II Criando uma nova aplicação web no Node.js... 82 Capítulo 3 Criando e configurando um projeto MEAN...83 3.1 Uma breve introdução a Express, Node.js e npm... 85 3.2 Criando um projeto no Express... 88 3.3 Modificando o Express para MVC... 97 5
6 MEAN Definitivo 3.4 Bootstrap: layouts rápidos e responsivos... 104 3.5 No ar com o Heroku... 109 3.6 Resumo...116 Capítulo 4 Construindo um site estático com Node.js e Express... 117 4.1 Definindo as rotas no Express... 119 4.2 Controladores básicos... 122 4.3 Criando algumas visões... 126 4.4 Adicionando mais visões... 140 4.5 Tornando as visões inteligentes... 150 4.6 Resumo... 168 Capítulo 5 Construindo um modelo de dados com MongoDB e Mongoose...169 5.1 Conectando a aplicação em Express ao MongoDB usando Mongoose... 171 5.2 Por que modelar os dados?... 181 5.3 Definindo schemas simples para o Mongoose... 187 5.4 Usando o shell do MongoDB para criar um banco e populá-lo com dados... 202 5.5 Enviando o banco de dados para o ambiente de produção... 209 5.6 Resumo... 219 Capítulo 6 Criando uma API REST: expondo o banco de dados MongoDB para a aplicação...220 6.1 As regras de uma API REST... 221 6.2 Configurando a API no Express... 227 6.3 Métodos GET: lendo dados a partir do MongoDB... 235 6.4 Métodos POST: inserindo dados no MongoDB... 253 6.5 Métodos PUT: atualizando dados no MongoDB... 262 6.6 Métodos DELETE: apagando dados do MongoDB... 268 6.7 Resumo... 272 Capítulo 7 Clientes API REST: usando a API de dentro do Express...273 7.1 Como chamar uma API a partir do Express...274 7.2 Solicitando listas de dados a uma API: a homepage do Loc8r... 278 7.3 Resgatando um único documento da API: a página de detalhes do Loc8r... 291 7.4 Gravando dados no banco pela API: as resenhas do Loc8r... 304 7.5 Protegendo a integridade dos dados com validação... 313 7.6 Resumo... 322 Parte III Um front-end dinâmico com o Angular...323 Capítulo 8 Empregando componentes do Angular em uma aplicação no Express...324 8.1 Conhecendo o Angular... 325 8.2 Mostrando e filtrando a lista de estabelecimentos... 333
Sumário 7 8.3 Obtendo dados da API... 350 8.4 Garantindo o funcionamento dos formulários... 364 8.5 Resumo... 365 Capítulo 9 Construindo uma aplicação de uma única página com o Angular: fundamentos..366 9.1 Construindo as fundações para o Angular SPA... 367 9.2 Transferindo o roteamento do Express para o Angular... 369 9.3 Adicionando as primeiras visões, controladores e serviços... 375 9.4 Melhorando o desempenho do navegador... 393 9.5 Resumo...400 Capítulo 10 Construindo uma aplicação de uma única página com o Angular: elevando o nível.402 10.1 Uma SPA autônoma: removendo as dependências ao servidor... 403 10.2 Adicionando outras páginas e injetando HTML dinamicamente... 415 10.3 Visões e rotas mais complexas... 423 10.4 Usando componentes do AngularUI para criar um popup modal... 435 10.5 Resumo... 454 Parte IV Gerenciando autenticação e sessões...455 Capítulo 11 Autenticando usuários, gerenciando seções e garantindo a segurança das APIs.456 11.1 Como funciona a autenticação no MEAN... 457 11.2 Criando um schema no MongoDB para os usuários... 461 11.3 Criando uma API de autenticação com o Passport... 470 11.4 Garantindo a segurança da API... 480 11.5 Criando um serviço de autenticação no Angular... 487 11.6 Criando as páginas de cadastro e login... 492 11.7 Trabalhando com autenticação na aplicação em Angular... 501 11.8 Resumo... 510 Apêndice A Instalando o MEAN... 512 A.1 Instalando Node.js e npm... 512 A.2 Instalando o Express de forma global...514 A.3 Instalando o MongoDB...514 A.4 Instalando o Angular... 516 Apêndice B Instalando e preparando o elenco de apoio... 517 B.1 Bootstrap, a ferramenta de templates do Twitter...517 B.2 Git... 519 B.3 Instalando um terminal de linha de comando mais poderoso... 519 B.4 Heroku... 520
8 MEAN Definitivo Apêndice C Montando as demais visões...521 C.1 Transferindo os dados das visões para os controladores... 521 Apêndice D Reaprendendo JavaScript...529 D.1 Todo mundo sabe JavaScript, certo?... 529 D.2 Bons e maus hábitos... 532 D.3 Uma introdução ao JSON... 550 D.4 JavaScript e seus callbacks... 555 D.5 Escrevendo código modular no JavaScript... 575 D.6 Resumo... 583