Como criar um projeto com Node.js Express e Mustache
Esses dias estive fazendo um projetinho com o Victor Sobreira utilizando Node.js. Uma das coisas legais do Node.js é que ele não é um framework web, mas uma plataforma para seus projetos web. Construído em cima da engine Javascript do Chrome o Node.js tem como carro chefe de sua propaganda a ideia do desenvolvimento web "Real Time" e sua grande capacidade assíncrona.
O desenvolvimento assíncrono com Node.js é fato e permite disponibilizar recursos tão logo eles estão disponíveis. Desta maneira, atividades de uma requisição que necessitem espera tem impacto reduzido no desempenho da aplicação. As palavrinhas chave aqui são Non-Blocking IO!
Quanto ao desenvolvimento Real Time, utilizar Node.js não significa, em verdade, desenvolvimento web Real Time, visto que um sistema real time depende de arquitetura como um todo, contudo a natureza assíncrona do Node.js o faz um componente bastante interessante em uma arquitetura real time.
O foco desta postagem não é exaltar as qualidades do Node.js (já tem gente demais falando sobre isso) mas sim uma escolha de configuração interessante e pouco divulgada, inclusive na página dos desenvolvedores, que é o uso do Node.js com o framework web Express.js utilizando Mustache.
Mustache
Mustache é uma especificação de templates atualmente portada para diversas linguagens, utilizada no twitter e muito simples. Ela se baseia em um conjunto bastante reduzido de marcações de texto para te possibilitar escrever seus templates html sem muito esforço. Diante de aberrações como as sugeridas atualmente na página do express, pode ser uma excelente pedida.
Como utilizar?
Utilizar a linguagem Mustache com seus templates utilizando express pode ser um pouco complicado no começo, devido à carência de documentação sobre esta dobradinha. Aqui você encontra a receita de bolo pronta para uso.
Primeirametne, instale o Node.js a partir do código fonte (instruções na página do projeto). Feito isto, crie um diretório para seu projeto. Utilizando o npm, instale o express. Agora crie um arquivo server.js e index.html. O primeiro será o arquivo do nosso projeto que trata requisições e o segundo nosso template de demonstração. Veja a sugestão de comandos abaixo:
mkdir meu_projeto/ # cria o diretório do projeto
cd meu_projeto/ # entra no diretório do projeto
npm install express # disponibiliza o express no diretório atual
touch server.js # cria o arquivo do projeto
touch index.html # cria o template principal
Abaixo há uma sugestão simples de código para o server.js:
var PORT = 3000; // porta escutando requisições
var HOST = null; // null para localhost
// importa o módulo express
var express = require("express");
// cria o servidor de aplicação com express
app = express.createServer();
app.listen(PORT, HOST); // inicia o servidor e aplicação
app.use(app.router);
// informamos que não vamos usar o template padrão layout
app.set('view options', {layout:false});
// informamos que a extensão padrão dos templates é html
app.set('view engine', 'html');
// informamos que os templates estarão no diretório raíz
app.set("views", __dirname);
// recebe requisições no path raíz e retorna o template
// index.html
app.get('/', function (req, res) {
res.render('index', {locals:{
// variáveis disponíveis no template
}});
});
// um pouquinho de informação de log
if (HOST == null) { HOST = "localhost" }
console.log('Server running at http://%s:%d/', HOST, PORT);
Até agora tudo ok. Para utilizarmos o Mustache, precisaremos da implementação Hogan e do conector Express-Hogan. Crie um diretório lig/hogan/ na raiz do seu projeto e copie os arquivos fonte de ambos os projetos lá. São eles: compiler.js, template.js, hogan.js e express-hogan.js. Em express-hogan.js modifique a primeira linha para:
var hogan = require('./hogan.js');
Agora no arquivo server.js, adicione:
// após var express = require("express");
var ehogan = require("./lib/hogan/express-hogan.js");
// antes de app.set('view options'...
app.register('.html', ehogan);
Feito! Dê uma lida no manual do Mustache para algumas instruções de utilização e pronto, seu projeto com Mustache está feito. O arquivo server.js final deve ficar deste jeito:
var PORT = 3000;
var HOST = null;
var express = require("express"),
ehogan = require("./lib/hogan/express-hogan.js");
app = express.createServer();
app.listen(PORT, HOST);
app.use(app.router);
app.register('.html', ehogan);
app.set('view options', {layout:false});
app.set('view engine', 'html');
app.set("views", __dirname);
app.get('/', function (req, res) {
res.render('index', {locals:{
// variáveis disponíveis no template
}});
});
if (HOST == null) { HOST = "localhost" }
console.log('Server running at http://%s:%d/', HOST, PORT);