© Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!)....

19

Transcript of © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!)....

Page 1: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,
Page 2: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

© Casa do Código

Todos os direitos reservados e protegidos pela Lei nº9.610, de

10/02/1998.

Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem

autorização prévia por escrito da editora, sejam quais forem os meios:

fotográficos, eletrônicos, mecânicos, gravação ou quaisquer outros.

Casa do Código

Livros para o programador

Rua Vergueiro, 3185 - 8º andar

04101-300 – Vila Mariana – São Paulo – SP – Brasil

Page 3: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código

Agradecimentos

Obrigado, Deus, por mais uma conquista em minha vida! Obrigado pai emãe pelo amor, força e incentivo em todas as etapas decisivas de minha vida.Obrigado por tudo e principalmente por estar ao meu lado em todos os mo-mentos.

Um agradecimento especial à minha namorada Natália Santos, obrigadopelo apoio, compreensão e companhia, sei que em alguns momentos não foifácil para nós, mas o importante é que conseguimos juntos, e essa vitória eudedico totalmente para você e minha família.

Agradeço à sra. Charlotte Bento de Carvalho, pelo apoio e incentivo nosmeus estudos desde a escola até a minha formatura na faculdade.

Obrigado ao pessoal da editora Casa do Código, em especial ao Paulo Sil-veira e Adriano Almeida. Muito obrigado pelo suporte, apoio, pela con�ançae por mais esta nova oportunidade.

Obrigado à galera da comunidade NodeBR e Meteor Brasil, Os feedbacksde vocês ajudaram muito a melhorar este livro e também meu livro anteriorde Node.js.

Obrigado também aos leitores do blog meu UndergroundWebDev (http://udgwebdev.com) que acompanham e comentam os posts frequentemente.

Por último, obrigado a você, prezado leitor, por adquirir meu novo livro.Que este seja, uma boa referência de estudos sobre Meteor.

i

Page 4: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,
Page 5: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código

Sobre o autor

Figura �: Caio Ribeiro Pereira

Caio Ribeiro Pereira trabalha como Web Developer na BankFacil, bacharelem Sistemas de Informação pela Universidade Católica de Santos, sua expe-riência é baseada no domínio dessa sopa de letrinhas: Node.js, Meteor, Ja-vascript, Ruby, Java, LevelDB, MongoDB, Redis, Filoso�a Lean, Scrum, XP eTDD.

Blogueiro nos tempos livres, apaixonado por desenvolvimento de so�-ware, web, tecnologias, �lmes e seriados. Participante ativo das comunidades:

• NodeBR: Comunidade Brasileira de Node.js

• MeteorBrasil: Comunidade Brasileira de Meteor

• DevInSantos: Grupo de Desenvolvedores de So�ware em Santos

Iniciou em ���� como palestrante nos eventos DevInSantos e Exatec,abordando temas atuais sobre Node.js e Javascript. Criador do Node Web

iii

Page 6: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código

Modules (um site que apresenta dados estatísticos sobre os frameworks webpara Node.js) e fundador do Google Groups Meteor Brasil.

Autor dos Blogs: Underground WebDev e Underground Linux.

iv

Page 7: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código

PrefácioAs mudanças do mundo web

Atualmente, o JavaScript já é uma opção real e aceitável no desenvolvimentoserver-side em muitos projetos. Isso traz como uma das vantagens a possi-bilidade de construir uma aplicação utilizando apenas uma única linguagem,tanto no cliente (através do clássico JavaScript compatível em todos os brow-sers) como no servidor (através do íncrivel e poderoso Node.js!).

Graças ao Node.js, diversos frameworks web surgiram — diferente dasoutras linguagens, existem mais de �� frameworks web para Node.js! Nãoacredita? Então veja com seus próprios olhos essa lista de frameworks aces-sando o site:

http://nodewebmodules.comExpress eMeteor são os frameworks quemais se destacam, ambos são fra-

meworks para Node.js com características únicas. O Express é consideradoum framework minimalista, focado em criar projetos através de estruturascustomizadas pelo desenvolvedor. Com ele é possível criar serviços REST,aplicações web tanto em padrão MVC (Model-View-Controller) como MVR(Model-View-Routes) ou totalmente sem padrão em um único arquivo, tudovai depender das boas práticas aplicadas pelo desenvolvedor. Uma aplicaçãoExpress pode ser pequena ou de grande porte, tudo vai depender dos requi-sitos e, principalmente, de como vai organizar todos códigos nele, a�nal como Express você tem o poder de aplicar suas próprias convenções e organiza-ções de código. Outro detalhe é que você utiliza seu próprio framework depersistência de dados, então todo controle �ca em suas mãos.

A princípio, se você possui um bom conhecimento sobre o Express e osdemais frameworks necessários para construir sua aplicação, então você terávelocidade su�ciente para desenvolver uma aplicação de forma ágil. Mas e

v

Page 8: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código

se existisse um framework Node.js, cujo foco é prototipar telas em extremavelocidade? Tudo isso utilizando componentes prontos que são facilmentecustomizáveis e com con�gurações complexas simpli�cadas alto nível paravocê utilizar (aplicando os princípios de convenção sobre con�guração). Nomundo Ruby, isso deu certo através do inovador framework Rails; agora te-mos uma inovação semelhante no mundo Node.js, essa inovação se chamaMeteor.

A quem se destina este livro?

Esse livro é destinado aos desenvolvedores que tenham pelo menos co-nhecimentos básicos deNode.js, Javascript e arquitetura web cliente-servidor.Ter domínio desses conceitos, mesmo que a nível básico, será necessário paraque a leitura seja de fácil entendimento.

Como devo estudar?

Este livro é praticamente um hands-on que visa ensinar os principais con-ceitos doMeteor através da construção de uma aplicação web do zero. Ao de-correr da leitura serão apresentados diversos conceitos e muito código paraimplementar no projeto, aplicar na prática os conceitos teóricos e aprenderboas práticas e convenções desta tecnologia.

vi

Page 9: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código Sumário

Sumário

� Introdução ��.� Conhecendo seu mundo . . . . . . . . . . . . . . . . . . . . . ��.� Os � princípios do Meteor . . . . . . . . . . . . . . . . . . . . �

� Con�gurando o ambiente de desenvolvimento ��.� Detalhes sobre a instalação . . . . . . . . . . . . . . . . . . . . ��.� Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ��.� MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ���.� Instalando o Meteor . . . . . . . . . . . . . . . . . . . . . . . . ���.� Rodando o Meteor . . . . . . . . . . . . . . . . . . . . . . . . . ���.� Fazendo deploy para testes . . . . . . . . . . . . . . . . . . . . ���.� Gerenciando packages comMeteorite . . . . . . . . . . . . . ��

� Criando uma rede social real-time ���.� Projeto piloto: MeteorBird . . . . . . . . . . . . . . . . . . . . ���.� Funcionalidades da aplicação . . . . . . . . . . . . . . . . . . ���.� Criando o projeto . . . . . . . . . . . . . . . . . . . . . . . . . ��

� Implementando uma timeline de posts ���.� Estruturando os templates . . . . . . . . . . . . . . . . . . . . ���.� Criando o template da timeline . . . . . . . . . . . . . . . . . ���.� Publicando posts na timeline . . . . . . . . . . . . . . . . . . . ���.� Persistindo e listando posts em tempo-real . . . . . . . . . . . ��

vii

Page 10: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Sumário Casa do Código

� Signin e Signup de usuários ���.� Explorando Accounts do Meteor . . . . . . . . . . . . . . . . ���.� Associando posts a um usuário . . . . . . . . . . . . . . . . . ���.� Exibindo timeline somente para logados . . . . . . . . . . . . ���.� Autenticação via conta Facebook . . . . . . . . . . . . . . . . ��

� Per�l do usuário ���.� Criando template de per�l . . . . . . . . . . . . . . . . . . . . ���.� Autocompletando per�l via signin do Facebook . . . . . . . . ��

� Tela de per�l público do usuário ���.� Adaptando rotas no projeto . . . . . . . . . . . . . . . . . . . ���.� Per�l público do usuário . . . . . . . . . . . . . . . . . . . . . ��

� Follow me I will follow you ���.� Introdução sobre a funcionalidade . . . . . . . . . . . . . . . ���.� Criando os botões de Follow e Unfollow . . . . . . . . . . . . ���.� Contador de seguidores no per�l . . . . . . . . . . . . . . . . ���.� Visualizando post de quem você seguir . . . . . . . . . . . . . ��

� Publications e Subscriptions ���.� O que é PubSub? . . . . . . . . . . . . . . . . . . . . . . . . . . ���.� Entendendo seu mecanismo . . . . . . . . . . . . . . . . . . . ���.� Adaptando o PubSub no projeto . . . . . . . . . . . . . . . . . ��

�� Testes, testes e mais testes �����.� Frameworks de testes para o Meteor . . . . . . . . . . . . . . �����.� Primeiros passos com Laika . . . . . . . . . . . . . . . . . . . �����.� Criando testes . . . . . . . . . . . . . . . . . . . . . . . . . . . �����.� Desa�o: testar o modelo Post . . . . . . . . . . . . . . . . . . . ���

�� Integração contínua no Meteor �����.� Rodando Meteor no Travis-CI . . . . . . . . . . . . . . . . . . ���

viii

Page 11: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código Sumário

�� Preparando para produção �����.� Monitorando a aplicação através de logs . . . . . . . . . . . . �����.� Habilitando cache em arquivos estáticos . . . . . . . . . . . . �����.� Utilizando o Fast Render . . . . . . . . . . . . . . . . . . . . . �����.� Otimizando consultas no MongoDB com Find-Faster . . . . �����.� Con�gurando variáveis de ambiente . . . . . . . . . . . . . . ���

�� Hospedando uma aplicação Meteor �����.� Convertendo Meteor para Node.js com Demeteorizer . . . . �����.� Onde hospedar uma aplicação Meteor? . . . . . . . . . . . . . ���

�� Como organizar um projeto Meteor �����.� Convenções de diretórios e arquivos . . . . . . . . . . . . . . ���

�� Continuando os estudos ���Versão: ��.�.�

ix

Page 12: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,
Page 13: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

C������� �

Introdução

�.� C��������� ��� �����O Meteor é um framework web full-stack ���� JavaScript, ou seja, com elevocê vai construir aplicações programando em todas as camadas: cliente, ser-vidor e banco de dados, usando JavaScript, Node.js e MongoDB, tudo issoutilizando apenas uma única linguagem de programação, o JavaScript.

Outro detalhe importante é que o foco desse framework é a prototipagemrápida, fazendo com que trabalhos que levariam meses sejam realizados emsemanas, ou até mesmo alguns dias. Isso é possível graças aos seus recursosque visam automatizar tarefas repetitivas, exibir respostas imediatas no brow-ser, diversas convenções, vários componentes customizáveis prontos para usoe também as con�gurações complexas de baixo nível que estão simpli�ca-das para o desenvolvedor. Por default, suas aplicações Meteor serão em for-mato single-page real-time, mas também é possível criar aplicaçõesmulti-page

Page 14: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

�.�. Conhecendo seu mundo Casa do Código

orientado a rotas. Este framework é considerado como um MVVM (Model-View View-Model), ou seja, não existe controllers ou routes por default, mas écustomizá-lo comopropósito de adicionar controllers, routes e outros patternsatravés da inclusão packages third-party.

O Meteor é uma plataforma de desenvolvimento completa, sendo que omecanismo principal responsável por toda magia back-end é o Node.js. As-sim como o Node.js possui seu gerenciador de módulos — o NPM (NodePackage Manager), o Meteor possui o seu próprio gerenciador de packages(sim, módulos e packages são a mesma coisa, ou seja, são frameworks), quese chamaAtmosphere. Este permite usar projetos third-party criados pela co-munidade, sem contar que também é possível utilizar a maioria — mas nãotodos — dos módulos NPM dentro de uma aplicação Meteor (algo que seráexplicado nos capítulos futuros). Isso pode evitar a “invenção da roda”, po-rém tudo vai depender da compatibilidade de tal módulo Node no contextodo Meteor.

Trabalhar comMeteor é trabalhar com JavaScript, e isso faz comquemui-tos desenvolvedores tenham uma curva de aprendizado rápida, e em poucosdias de estudos você terá dominado os principais pontos e aspectos deste fra-mework. Se você não conhece Node.js mas domina JavaScript, não tenha re-ceio de ler esse livro, pois poucas coisas sobre Node.js serão abordadas aqui.

Este é um framework de muitos recursos, ou seja, constituído por umconjunto de frameworks domundoNode.js e JavaScript. Algumas bibliotecasconhecidas que fazem parte dele são:

• SockJS— framework emulador deWebSockets e responsável pelo fun-cionamento do protocolo DDP (Data Distribution Protocol).

• MongoDB— banco de dados default.

• Handlebars — template engine.

• PubSub — biblioteca de emissão e escuta de eventos via pattern: pu-blisher / subscriber.

• MiniMongo—API client-sideque possui amaioria das funcionalidadesdo MongoDB.

Page 15: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código Capítulo �. Introdução

• Connect — módulo Node.js com funcionalidades para trabalhar comprotocolo HTTP.

Esses são alguns frameworks internos que são essenciais para dar vida aoMeteor.

�.� O� � ���������� ��M�����O Meteor é um framework totalmente inovador, ele engloba diversas boaspráticas de frameworks como Rails do Ruby, Django do Python, Express doNode.js, além da própria equipe adotar suas próprias convenções. Tudo issosurgiu baseado em � princípios, e eles são:

�Data on the wire

Figura �.�: Handlebars é o template engine do Meteor.

Não envie HTML pela rede e sim apenas dados, deixando que o cliente

Page 16: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

�.�. Os � princípios do Meteor Casa do Código

decida como apresentá-los.

�One language

Figura �.�: Node.js, Javascript e MongoDB.

Escreva código JavaScript em todas as camadas: cliente, servidor e bancode dados. Isso simpli�ca e agiliza o desenvolvimento, além de garantir umacurva de aprendizado baixa.

�Database anywhere

Figura �.�: Banco de dados compartilhado entre cliente e servidor.

Utilize uma API de interface única e transparente que lhe permite acessaro banco de dados tanto no cliente como no servidor.

Page 17: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código Capítulo �. Introdução

� Latency compensation

Figura �.�: Latência zero ao acessar dados via cliente.

No cliente é usado prefetching e model simulation na API client-side dobanco de dados para atingir latência zero no acesso de seus recursos.

� Full-Stack Reactivity

Figura �.�: Meteor é um framework full-stack real-time.

Por default tudo funciona em real-time. E todas as camadas da aplicaçãoadotam o paradigma orientado a eventos, que é herdado do Node.js.

Page 18: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

�.�. Os � princípios do Meteor Casa do Código

� Embrace the ecosystem

Figura �.�: Meteor é mais uma iniciativa open-source.

Totalmente open-source, o Meteor possui suas convenções pelas quaisagrega novos conceitos e valores, em vez de ser uma ferramenta que subs-tituirá outros frameworks.

Page 19: © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!). Graças ao Node.js, diversos frameworks web surgiram — diferente das outras linguagens,

Casa do Código Capítulo �. Introdução

� Simplicity equals Productivity

Figura �.�: Aumente sua produtividade trabalhando comMeteor!

Seja produtivo! Desenvolva de mais features de forma rápida e simpli-�cada. O Meteor mantém um conjunto de APIs fáceis de implementar e acomunidade Meteor está sempre colaborando para evolução do framework.