© Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!)....
Transcript of © Casa do Código - Amazon S3sers) como no servidor (através do íncrivel e poderoso Node.js!)....
© 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
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
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
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
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
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
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
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
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
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
�.�. 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.
�
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
�
�.�. 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.
�
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.
�
�.�. 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.
�
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.
�