Prévia do material em texto
MEAN Stack Parte I O que vamos fazer ao longo do curso • Vamos falar sobre Node.js/Express, mongoDB e Angular; • Vamos aprender a conectar Angular como um frontend com Node.js, Express e mongoDB como um backend; – Prover apropriados “endpoints” no backend para que o frontend possa consumir – Conectar o NodeJS backend com a Angular App através Angular’s Http Service – Usar MongoDB com Mongoose para interagir com os Dados no backend – Use ExpressJS como um NodeJS Framework • Construir Componentes Reutilizáveis com Angular • Vamos construir uma aplicação para aplicar os conceitos; MEAN Stack • O acrônimo MEAN foi cunhado para denotar o uso de uma stack completa para desenvolvimento de aplicações incluindo MongoDB, Express, Angular e Node.js (N)ode.js • Node.js e uma plataforma para aplicações JavaScript – “toscamente falando” é JavaScript no lado do servidor com recursos para lidar com tarefas específicas do lado do servidor • É possível utilizar bibliotecas desenvolvidas pela comunidade através de seu gerenciador de pacotes chamado npm. • Na MEAN Stack, Node.js e a condição “base” para seu funcionamento, o core. (E)xpress • Express é um framework web light-weight, que trabalha junto com o Node.js, e que ajuda na organização de sua aplicação web na arquitetura MVC no lado do servidor. • Facilita “a vida”, em vez de ter que fazer várias tarefas recorrentes “na mão”, se usasse somente o Node.js • Na MEAN Stack, o Express geralmente disponibiliza endpoints que são consumidos pelo Angular, que por sua vez são atualizados com base nos dados recebidos. Express é um framework que “encapsula” o Node.js Estende a capacidade padrão do Node.js adicionando middlewares, views e rotas, etc (A)ngular • Angular é um framework MVC no lado do cliente voltado para Single PageWeb Applications (SPA). – Aplicações de apenas uma página com grande parte de seu código no cliente, em JavaScript . (No caso do Angular, TypeScript) • O foco é a interatividade com o usuário (reactive user experience) • Diferente da maneira tradicional, na qual dado e lógica são processados no servidor, Angular facilita o recebimento de dados e execução de lógica diretamente no cliente. • Na MEAN Stack, Angular é o responsável por interfaces dinâmicas e permite acessar facilmente endpoints diretamente do cliente. - Atualiza apenas partes que são necessárias do DOM - Lidar com rotas (a lógica de navegação é praticamente “responsa” do lado cliente) - Não precisa enviar request e esperar response. Tudo acontece “na hora” (M)ongoDB • MongoDB e um banco de dados NoSQL flexível e escalável. – Combina a habilidade de escalar com os muitos recursos presentes nos bancos de dados relacionais como índices, ordenação etc. • E um banco fracamente tipado, o que ajuda muito pouco com validação de dados, de modo que boa parte da responsabilidade das regras de validação fica nas mãos dos desenvolvedores. • Na MEAN Stack, MongoDB permite armazenar e reaver um dado em um formato muito similar ao JSON (JavaScript Object Notation) Vantagens da stack • Produtividade e Integração da equipe – frontend e backend trabalhando com a mesma linguagem • Prototipação e Debugging – A estrutura do dado enviado e semelhante no cliente, no servidor e no banco, o que reduz drasticamente o tempo com conversões. • Performance – Há a possibilidade de processar totalmente ou parcialmente dados e lógica no cliente, onerando menos o servidor. • Build, teste e gerenciamento de dependências – Não é necessário utilizar ferramentas de build ou de gerenciamento de pacotes frontend em outras linguagens. Como Node.js e Angular trabalham juntos • Modelo clássico: • Cliente (browser) e Servidor trocando requisições para “todas as coisas” solicitadas • Não há nada de errado com isso… – A não ser que normalmente temos que enviar uma request para cada simples alteração da página. Como Node.js e Angular trabalham juntos • Single Page Application • Há uma mudança do modelo tradicional. • O cliente pode fazer várias coisas sem ter que necessariamente “visitar” o servidor – Não precisamos conectar nele frequentemente • Claro, se for para enviar ou buscar alguma coisa do BD, por exemplo, a requisição vai ocorrer – Mas o Angular faz isso em background... Como Node.js e Angular trabalham juntos • Angular + Node.js • O ponto chave a ser entendido aqui é que: – Uma vez que a página já está carregada no browser, é usado as “rotas do Angular” para lidar com o usuário e com o DOM ou direcionar para o server-side; – O Node.js expõe alguns end-point (“rotas do Node.js”) que o Angular pode conectar (behind the scenes) para trocar dados e “conversar” com o servidor. Os route controllers possuem o código a ser executado e acesso ao BD – A comunicação entre front e back end é assíncrona Preparando o Projeto • O que precisamos fazer inicialmente: – Instalar o Node.js para executar o código do lado do servidor (http://nodejs.org) – Para verificar: • Win: no CMD digite “node –v” • Visual Studio Code: no terminal digite “./node –v” http://nodejs.org/ Preparando o Projeto • O que precisamos fazer inicialmente: – Descompactar como base o “seed- project - BASE.zip”, que está preparado para usar as dependências e possui uma estruturação básica de projeto. – Mais para frente entraremos em detalhe dos elementos apresentados Preparando o Projeto • O que precisamos fazer inicialmente: – Executar “npm install”, dentro do diretório do projeto, para poder instalar as dependências. • Do lado do servidor vai pegar o Express.js • Do lado do cliente vai pegar o Angular.js Preparando o Projeto • O que precisamos fazer inicialmente: – Para verificar se está tudo OK DO LADO DO CLIENTE, executar “npm run build” e “deixar rodando”. • É importante deixar rodando pois “ups” no código são automaticamente implantados – Para verificar se está tudo OK DO LADO DO SERVIDOR, executar, em outro terminal e no mesmo diretório, “npm start” e “deixar rodando”. • Esse comando vai “startar” o servidor Preparando o Projeto • O que precisamos fazer inicialmente: – No browser, acesse “localhost:3000” e deve aparecer “Hello World” – Importante observar que isso que está aparecendo já é Angular com Node.js/Express Preparando o Projeto • Escolher um ambiente/IDE de desenvolvimento – Supondo que o Node.js, o projeto padrão e as suas dependências (Express e Angular) já foram instalados via CMD do SO – Vamos usar o Visual Studio Code para rodar o cliente e o servidor e verificar se tudo está OK... https://code.visualstudio.com/ https://code.visualstudio.com/docs/getst arted/userinterface https://code.visualstudio.com/docs/getst arted/settings https://aws.amazon.com/pt/cloud9/ Preparando o Projeto • Escolher um ambiente/IDE de desenvolvimento: Preparando o Projeto • Escolher um ambiente/IDE de desenvolvimento: Preparando o Projeto • Escolher um ambiente/IDE de desenvolvimento: – Vamos mexer a incrementar nesse app mais pra frente.. Entendendo a Estrutura do Projeto node_modules • Armazena os arquivos de todas dependências (é a biblioteca incorporada) • É gerenciada por nós a medida que vamos instalando novos recursos no projeto • Não precisamos mexer aqui... !install • Apenas criado para deixar a instalação do Node.js e Visual Studio Code • Não precisa ter. .vscode • Configuração pessoal do Visual Studio Code • É criado quando se personaliza algo DICA: - assets armazena diretórios do cliente (“front-end”) - Todos os outros são diretórios do lado do servidor (“back-end”) Entendendo a Estrutura do Projeto assets / app • Armazena a aplicação app feita em Angular • Os arquivos apresentados fazem parte da estrutura de uma aplicação em angular • Aqui temos o nosso “lado do cliente” ou seja, a nossa aplicação front-end Rapidamente.... • Aplicações Angular são construídas com componentes • Aqui temos o componentes da aplicação app Rapidamente....• Setamos qual o código HTML que será renderizado quando “invocamos” esse componente Entendendo a Estrutura do Projeto bin • Armazena o servidor Node.js • Aqui realizamos a configuração do servidor • A configuração é feita no arquivo www Rapidamente.... • Setamos o porto, iniciamos o servidor, etc • Mais para frente vamos ver como a requisição chega até a aplicação app Entendendo a Estrutura do Projeto Rapidamente.... • No diretório assets nós criamos a aplicação • No diretório public nós disponibilizamos para o servidor public • Armazena o diretório que contém a aplicação app desenvolvida • Seria como o local onde fazemos o “deploy” da aplicação para poder ser invocada pelo browser • O bundle.js é “criado automaticamente” não precisa mexer em nada neste diretório • Também armazena os CSS utilizados Entendendo a Estrutura do Projeto routes • Armazena as rotas do servidor para a aplicação app Rapidamente.... • Aqui temos apenas uma rota registrada no servidor • Se chegar em “/” (que significa localhost/) renderiza o “index” • O “index” se encontra no diretório “views” do servidor Entendendo a Estrutura do Projeto views • Armazena um “template engine” usado pelo servidor para carregar a app • O arquivo “index.hbs” contém a aplicação app que vai ser “inicializada” Rapidamente.... • Está usando Handlebars como “template engine”, por isso o arquivo tem a extensão “.hbs” • O legal de templates é que ajuda a separar os “views” da sua lógica • A extensão diz basicamente que estamos usando templates no servidor. • Tem o head com os imports de CSS necessários • Tem a tag “<my-app>” que é um componente construído com Angular • Tem o import do “bundle.js” que empacota a aplicação app (código criado, frameworks e dependências) Entendendo a Estrutura do Projeto app.js • De todos os arquivos listado aqui, o “app.js” é o mais importante • Ele é o arquivo principal que starta o nosso Express no servidor • Cada requisição que chega no servidor passa por esse arquivo • Desse modo, vários métodos podem ser aplicado na requisição Rapidamente.... • Um dos pontos mais importantes é o despacho para a rota correta • Aqui encaminhamos a requisição para as rotas da aplicação app (./routes/app) Entendendo a Estrutura do Projeto Os outros arquivos... • São apenas arquivos de configuração para o projeto, para o processo de build. • Normalmente não tem muito o que mexer aqui... Rapidamente.... • De forma geral, o arquivo mais importante para ser mencionado é o “package.json” • Ele gerencia toda a produção e dependências do projeto • Aqui vemos os scripts que usamos para inicializar e construir a aplicação Atividades • Para fechar – Vamos rodar o projeto base e ver o resultado no browser – Altere o conteúdo da página do componente HTML do Angular e veja se o resultado aparece automaticamente ao dar um refresh no browser – Modifique o arquivo de estilo (no local correto) para que o H1 fique com a cor verde. Atividades • Para fechar – Incorpore o código abaixo no projeto existente • Crie um novo arquivo CSS na estrutura – stylelogin.css • Crie uma nova linha de chamada • Atualiza o HTML apropriado com o código oferecido – login-parteI.txt Atividades • Para fechar – Incorpore o código abaixo no projeto existente • Crie um novo arquivo CSS na estrutura – styleregister.css • Crie uma nova linha de chamada • Atualiza o HTML apropriado com o código oferecido – register-parteI.txt