Vamos aprender node.js – Parte 1 – Primeiros passos

Posted on 30/11/2011

3


Olá pessoal. Tudo certo?!

Hoje, começo uma nova série aqui no blog. Vamos falar sobre node.js.

Minha proposta é começar “devagar” e ir aumentando a complexidade dos posts e exemplos na medida em que a série for avançando.

O que é node.js?

Node.js é um ambiente de execução e um conjunto de bibliotecas open-source.

Ele permite que executemos código em Javascript, fora do browser. Para isso, utiliza o , desenvolvido pela Google e responsável pela execução de scripts no Chrome. Indo além, node.js provê um conjunto de “modules” que aceleram o desenvolvimento de aplicativos.

Como obter?

Node.js funciona em diversos sistemas operacionais, incluindo Windows. Para obter a instalação, acesse: http://nodejs.org/#download

A instalação para Windows é bem pequena (~2.8 Mb). Sua execução é fácil e bastante intuitiva (estilo “Next-Next-Finish”)

Primeira execução

Node.js possui um console REPL, que pode acionado na linha de comando digitando “node”. Observe:

image

Como indicado no screenshot, você pode digitar instruções Javascript e ver o resultado da execução imediatamente.

Para encerrar a execução do REPL, basta pressionar Control+C duas vezes.

Hello World em Node.js

Podemos escrever programas completos em Javascript e utilizar o Node.js para realizar sua execução.

Observe o exemplo que segue:

var http = require("http"),
    onRequest = function (request, response) {
        console.log("Request received.");
        response.writeHead(200, { "Content-Type": "text/plain" });
        response.write("Hello World");
        response.end();
    };

http.createServer(onRequest).listen(666);
console.log("node.js server has started");

Recomendo que você “cole” esse código e salve em um arquivo chamado “simple_server.js”.

O que fizemos? Escrevemos um “pequeno” servidor HTTP. Para executar, no prompt de comando, digite “node simple_server.js” (lembre-se de fazer do diretório onde salvou o arquivo o diretório atual)

O resultado deve ser semelhante ao indicado:

image

Agora, você pode se “comunicar” com esse server, no browser, acessando o endereço http://localhost:666.

image

Outra alternativa é usar o Fiddler.

image

Repare que a cada “acesso” ao endereço. Temos uma alteração no console do server.

image

Entendendo o código do nosso “Hello world”

Vamos dar uma “dissecada” no código que acabamos de escrever. Para começar, a importação do módulo http.

var http = require("http"),

Esta linha requisita o módulo “http” que é distribuído junto com o node.js. Depois, escrevo um “handler” para requests http. Esta função está conforme a especificação do node.js.

onRequest = function (request, response) {
    console.log("Request received.");
    response.writeHead(200, { "Content-Type": "text/plain" });
    response.write("Hello World");
    response.end();
};

A função recebe dois parâmetros. O primeiro, request, possui informações sobre o “request” que está sendo processado. O segundo, response , é nossa interface para responder para o cliente.

Usamos console.log para escrever algo na saída padrão do sistema operacional. É essa linha que imprime uma mensagem para cada request que é processado.

Depois, usamos os métodos writeHead e write do objeto response para compor a resposta.

Por fim, criamos, efetivamente, nosso server informando nossa função handler e a porta que desejamos “escutar”.

http.createServer(onRequest).listen(666);
console.log("node.js server has started");

E isso é tudo.

Um exemplo um pouco mais estruturado

O exemplo anterior é bacana. Mas, está todo em um arquivo. Aplicativos maiores podem ficar difíceis de manutenir dessa forma. A solução está em particionar nosso código em módulos.

Comecemos separando o “starter” da aplicação e o nosso server. Observe (arquivo server.js):

var http = require("http"),
    url = require("url");

function start() {
    var onRequest = function (request, response) {
        var pathname = url.parse(request.url).pathname;
        console.log("Request for " + pathname + " received.");

        response.writeHead(200, { "Content-Type": "text/plain" });
        response.write("Hello World");
        response.end();
    };

    http.createServer(onRequest).listen(666);
    console.log("node.js server has started");
}
exports.start = start;

O que fizemos?

  1. carregamos um outro module do node.js: url. Esse module facilita o trabalho com urls (dahn!)
  2. colocamos nossa “inicialização” dentro de uma função chamada start;
  3. atribuímos essa função como valor de uma propriedade em um objeto chamado exports.

Agora, vamos escrever o nosso “starter”. Observe (arquivo index.js):

var server = require("./server");
server.start();

Como pode perceber, carrego o “módulo” através do nome do arquivo (sem extensão). Depois, basta chamar a função usando o nome da propriedade definida no objeto exports.

Veja o console após um request no IE.

image

Perceba o request do recurso e do favicon.ico.

Para esse primeiro post, era isso.

Smiley piscando

Etiquetado:,
Posted in: Post