Agosto de 2015

Número 8 do Volume 30

O programador: Como ser MEAN: Introdução

Por Ted Neward | Agosto de 2015

Ted NewardUniversos paralelos são a última moda, especialmente se você seguir as histórias em quadrinhos. Obviamente, posso entrar em um sozinho. Quando comecei a ler esta revista, ela era chamada Microsoft Systems Journal (abreviada como MSJ). Os idiomas de preferência eram C++ e Visual Basic. A plataforma de tecnologia subjacente era uma plataforma gerenciada (COM) escrita com linguagens não gerenciadas como C++ e linguagens gerenciadas, como o Visual Basic. O sistema operacional de preferência era obviamente de forma inquestionável, infalível e sem hesitação, o Windows. Talvez fosse o Windows 3.0, 3.1, Chicago ou NT — mas sempre Windows.

Veja onde estamos hoje. Claramente não é mais um mundo “Microsoft”, até mesmo no mundo da Microsoft. Esqueça, por um momento, os “concorrentes” contra os quais a Microsoft luta, como Java ou Ruby. A empresa tem parcerias com essas linguagens e ainda oferece suporte a elas nativamente na plataforma de geração avançada do Microsoft Azure. Esqueça as linguagens “proprietárias” da Microsoft, como o C# ou Visual Basic ou F#. Todas viraram software livre. Assim como sua estrutura Web e sua estrutura de acesso aos dados. E a nova versão do Visual Studio será fornecida com um emulador Android.

E quando pensamos que não era possível ser mais diferente, a Microsoft novamente veio e fez algo totalmente diferente. Quando este artigo estava sendo escrito, a Microsoft anunciava uma parceria com a Cyanogen, um distribuidor Android. Alguém pode me dizer qual foi o portal no qual eu entrei?

Nos quadrinhos, sempre que um herói entra em um novo universo, existe um momento no qual o herói adota o novo mundo ou corre o risco de ser identificado como um intruso, e possivelmente aprisionado em um sanatório. A menos que você goste de sanatórios, você provavelmente deve adotar esse novo mundo.

Torne-se MEAN

Vamos falar sobre o Node.js. Ou, mais precisamente, vamos falar sobre uma das pilhas favoritas de software para a plataforma do Node.js: MEAN (MongoDB, Express, AngularJS, Node. js). Ela está tornando-se um dos principais participantes no mundo das novas tecnologias. O suporte oferecido pela Microsoft para o Node.js e MongoDB no Azure (para não mencionar o fato de que você pode executá-los em um computador local com Windows padrão) significa, me perdoe pelo trocadilho, é algo que todo desenvolvedor da Microsoft deveria conhecer.

Você pode fazer MEAN de diversas formas, incluindo usando o Visual Studio. Começarei “adotando a maneira do Node”. Use apenas o conjunto de ferramentas preferencial do Node-ish: um editor de textos, a linha de comando e (se você tiver um à disposição) um Mac. Isso é o que eu usarei para começar, embora a maioria dos comandos de linha de comando fique muito bem ajustada ao Windows sem dificuldade, isso será diferente.

Antes de ir muito longe nesse universo paralelo, dê uma olhada nos principais participantes. A pilha MEAN é uma quarteto de “pilha completa”, o que significa que cobre front-end. back-end e armazenamento. Começando do front-end, o AngularJS oferece uma estrutura de cliente Web de Aplicativo de Página Única completa, com abstrações de Controlador de Exibição de Modelo e associação bidirecional para a Interface de Usuário. Apesar do AngularJS residir inteiramente no front-end, requer um back-end com o qual se comunique. Isso normalmente usa chamadas de API da Web. Elas também são conhecidas em alguns círculos como pontos de extremidade RESTful, embora isso pode levar a cuidadosos debates sobre o que o REST é, então vamos deixá-los como APIs da Web por enquanto.

Esses pontos de extremidade de API da Web são criados com a estrutura do Express colocada sobre a plataforma do Node.js. Isso é quase da mesma forma que fica a API Web do ASP.NET no pipeline do ASP.NET e o Microsoft .NET Framework. Essas APIs da Web de back-end claramente precisarão de um banco de dados para armazenamento, que é onde o MongoDB entra em cena. O MongoDB é um repositório de dados sem esquema orientado a documento (em comparação com o SQL Server, que é um armazenamento de dados relacionais orientados com esquema ) com alguma fragmentação interna e recursos de mapeamento/redução.

Isso já pode ter ocorrido para você nessas três partes: front-end, back-end e armazenamento, que são na verdade bastante intercambiáveis. Por exemplo, seria difícil imaginar o uso do AngularJS para se comunicar com APIs da Web ASP.NET, que por sua vez se comunicam com o MongoDB. Ou, usar um aplicativo Windows Forms como o front-end, fazendo chamadas HttpClient para o Node.js, que por sua vez se comunica com o MongoDB. Ou, apenas para refinar os três gols na mesma partida, AngularJS para Node.js para SQL Server.

Qualquer um desses três componentes tem facilmente “capacidade de troca”, desde que o front-end use HTTP (ou alguma coisa semelhante em plataforma neutra) para comunicar-se com o back-end. O back-end também precisa de um driver para comunicar-se com a sua opção de armazenamento de dados.

Instalar o Node.js

O Node.js é realmente uma coisa trivial para instalar, quando nos dirigimos a ele. Os desenvolvedores que têm o SDK do Azure já têm Node.js instalado e provavelmente já estão no PATH, para a inicialização. Basta digitar node em um prompt de comando para verificar se ele está instalado. O Ctrl+C o leva para fora do shell interativo que é disparado se o Node.js estiver instalado, a propósito.

Você precisará instalar o Node.js em um Windows novo de fábrica ou um Mac OS igualmente novo para esse fim. No Windows, a melhor maneira de fazer isso é obter o SDK do Azure, ou ir para o site do Node.js para obter um instalador MSI para Node.js, que o coloca no PATH por padrão. Também há um instalador para o Mac OS, mas a melhor abordagem no Mac é instalar outro gerenciador de pacote chamado Homebrew. Ele está disponível em brew.sh. Uma vez instalado, torna-se seu “braço direito” para instalar quase tudo no Mac, incluindo o Node.js.

O Homebrew tem um “brew install.node” que obterá todos as partes do Node.js, os instalará nos lugares certos (sem exigir acesso à raiz para fazê-lo) e vai colocá-los implicitamente no PATH. Novamente, “node” na linha de comando verificará se a instalação está funcionando. Quando iniciado, ele fornece a resposta de ruído mais baixa de qualquer utilitário que você jamais instalará (conforme mostrado naFigura 1).

Executando o Node.js. Não, falando sério, ele está em execução
Figura 1 Executando o Node.js. Não, falando sério, ele está em execução

Pressione Ctrl + C (duas vezes) para sair do Node.js. Você iniciou, mas ainda não terminou.

Instalar o NPM

O universo .NET tem o NuGet. O universo Ruby tem o gems. O universo do Node.js tem o Node Package Manager. Ele é chamado npm e é instalado como parte do próprio Node.js (o npm é realmente um pequeno aplicativo do Node.js que é executado a partir da linha de comando). Sem precisar fazer mais nada depois de instalar o Node.js, você deve ser capaz de acionar o npm usando apenas “npm” na linha de comando, conforme mostrado na Figura 2.

O Node Package Manager
Figura 2 O Node Package Manager

Os dois comandos com os quais você vai se preocupar mais são npm install e npm update. Cada um pode ter um ou mais nomes de pacote npm como um parâmetro. Quando você instala um pacote, o npm baixará o pacote do site npm da Web, exatamente como o NuGet. Em seguida, ele instala localmente no disco rígido sob o diretório atual. Assim, por exemplo, em um diretório vazio, informe ao npm para instalar o pacote de depuração (conforme mostrado na Figura 3).

Instalar um pacote npm
Figura 3 Instalar um pacote npm

A ferramenta npm responde informando que foi baixada a versão 2.1.3 do pacote de depuração, que por sua vez, depende versão 0.7.0 do pacote do ms. Mais importante, ambos foram instalados em um diretório local chamado node_modules. Este é o “repositório local” de todos os pacotes do Node.js, que você usará para esse aplicativo. Se por alguma razão você desejar um pacote npm instalado globalmente (em um diretório node_modules em algum lugar em um local compartilhado), você precisará usar npm install –g debug.

Depois que esses pacotes são instalados no diretório atual, faça referência a eles usando a chamada “require” no Node.js. Ela usa uma cadeia de caracteres que descreve o nome do pacote, que o Node espera encontrar dentro do diretório node_modules diretamente sob o diretório atual. Para o código a seguir, em um arquivo chamado helloDebug.js, carrega o pacote de depuração, o atribui a uma variável de mesmo nome (a convenção do Node.js) e o usa para obter um fluxo de depuração para emitir informações de depuração (semelhante a System.Diagnostics.Trace):

var debug = require('debug')('hello');
debug("This should never appear unless DEBUG=hello");

Agora quando você executa esse código (node helloDebug.js), se houver uma variável de ambiente chamada DEBUG definida como “hello”, as chamadas de depuração serão impressas no console. Caso contrário, nada será exibido. Em um sistema Mac ou Unix, você pode definir temporariamente uma variável de ambiente para uma execução do Node.js, prefixando a atribuição na frente do comando do node (conforme mostrado na Figura 4).

Olá, mundo da depuração
Figura 4 Olá, mundo da depuração

Isso não é muito, mas começa a dar uma ideia de como funciona o desenvolvimento do Node.js. Mais importante, lembre-se de que ao solicitar uma chamada você está pretendendo carregar um pacote para fora do diretório node_modules local. Assim, se uma solicitação falhar, isso significa que o pacote estava corrompido localmente ou nunca foi instalado. Na próxima coluna, falarei sobre como manter o controle de quais pacotes npm que estão instalados para que você não precise se lembrar.

Esqueci de mencionar que todo o código do Node.js é JavaScript? Se você não estiver acostumado com JavaScript, agora é um bom momento para refrescar a memória. O livro de Douglas Crockford “JavaScript: The Good Parts” (O’Reilly Media, 2008) é um ótimo lugar para começar.

Instalar o MongoDB

Obter o MongoDB em um sistema de desenvolvimento local é realmente simples. Baixe o arquivo. zip apropriado para o seu sistema do site do MongoDB (mongodb.org), descompacte-o e coloque os binários no seu PATH. O MongoDB também está disponível em várias formas de “como um serviço”, como MongoLab (mongolab.com), que oferece uma camada livre permanente para carregamento de dados de menos da metade um GB (o que é suficiente para a maioria das finalidades introdutórias). Instale o MongoDB localmente ou crie uma conta do MongoLab.

O download do MongoDB também tem o cliente de linha de comando “mongo” (semelhante em estilo e abrangência ao cliente de linha de comando do SQL Server). Isso é útil para acessar um banco de dados MongoDB em scripts de shell e assim por diante. Se você estiver mais centrado em interface gráfica do usuário, existem algumas ferramentas gratuitas de GUI do MongoDB no mundo. A minha favorita para o Mac é a RoboMongo e a MongoVue para o Windows.

Por padrão, suponha que o Mongo está sendo executado localmente (significando que o servidor é “localhost” e a porta padrão é 27017). Se você estiver familiarizado com o Mongo, você pode verificar na minha coluna anterior do MongoDB emmsdn.microsoft.com/magazine/ee310029 ou reserve alguns minutos para revisão em qualquer um das dezenas de milhares de artigos sobre o MongoDB online. O Bing é o seu amigo aqui.

Executar o MongoDB em um computador local também é simples. Suponha que o diretório bin do MongoDB está no PATH e acione apenas “mongod”. Ele vai supor que ele pode gravar o diretório “/var” para armazenar os dados. Normalmente, isso não é o que você deseja, então passe um arqgumento “--dbpath” (observe o hífen duplo) para especificar o diretório de escolha para armazenar os dados.

O site do MongoDB também tem instruções sobre como executar o MongoDB como um serviço do Windows ou como um daemon em * nix platforms. No entanto, iniciá-lo “manualmente” em primeiro plano tem a vantagem adicional de poder ver os logs do MongoDB que estão sendo gravados na tela conforme eles ocorrem.

Conclusão

Isso é tudo para o espaço deste mês, mas você tem as partes principais que precisa para começar. Da próxima vez, vou iniciar dando um giro sobre alguns pontos de extremidade HTTP no servidor, o uso do Express, falar um pouco mais sobre como um aplicativo do Node.js é estruturado e como criar esses pontos de extremidade para execução no Azure. Começarei também examinar algumas das ferramentas que usam aplicativos Node.js como parte de seu desenvolvimento. Mas por enquanto …

Boa codificação.


Ted Newardé o CTO na iTrellis, uma empresa de serviços de consultoria. Ele já escreveu mais de 100 artigos e é autor e coautor de dezenas de livros, incluindo “Professional F# 2.0” (Wrox, 2010). Ele é um MVP de F# e participa como palestrante em conferências em todo o mundo. Ele atua como consultor e mentor regularmente. Entre em contato com ele pelo email ted@tedneward.com ou ted@itrellis.com se estiver interessado.