- O documento discute o framework NodeJS para desenvolvimento de aplicações web server-side usando Javascript, incluindo tópicos como arquitetura, instalação, criação de projetos, uso de módulos, frameworks como Express e banco de dados MongoDB.
2. SUMÁRIO
• O que é NodeJS?
• Single-thread
• Event-loop
• Instalação e Configuração
• O Básico com NodeJS
• Iniciando um Projeto
• package.json
• Servidor HTTP
• Assíncrono x Síncrono
• Módulo
• Express - use um framework
• Criando uma API para Registro de Log
• RESTful
• MongoDB
• Node em Produção
3. NODEJSO que é NodeJS?
- Arquitetura non-blocking thread e event-driven.Aproveita melhor os recursos de memória e
processamento do servidor;
- Altamente escalável e de baixo nível. Permite usar protocolos de rede e bibliotecas para acessar recursos
do OS;
- A linguagem de programação é o Javascript. Permite trabalhar no client e server side com a mesma
linguagem;
- Engine V8 desenvolvida pela Google, mesma utilizada no Google Chrome. Escrita em C++ e ultra rápida.
!
O NodeJS não é?
Não é um servidor web tradicional como:Apache eTomcat.
!
! Aconselhável Não aconselhável
- API RESTful
- Aplicação RealTime (Ex.: Chat, Gráficos, outros)
- Filas Enormes (Ex. que poderia ser usado: tweets)
- Streaming de dados
- Coleta de Dados Estatísticos
!
Em resumo o NodeJS é muito utilizado em Arquitetura
Orientada a Serviço (SOA em inglês).
!
Projetos em Node https://github.com/joyent/node/wiki/
Projects,-Applications,-and-Companies-Using-Node
- Sites
- CMS
- HTML Apps
- CRUD simples
- Aplicações pesadas de Banco de Dados Relacional
- Aplicação pesadas para o CPU (Ex.: Manipulação de
vídeos; Business Inteligence; ERP; )
!
O NodeJS geralmente não é recomendado para aplicações
tradicionais.
4. NODEJS
Single-thread
O NodeJS trabalha com single-
thread, ou seja, a aplicação terá
instância de um processo. Mas é
possível criar um sistema concorrente
usando clusters que é um módulo
nativo do Node.
5. NODEJS
Event-loop
O NodeJS é orientado a eventos. Ele trabalha com eventos de I/O do servidor, como por exemplo, os
eventos connect de um bd, open de um arquivo, data de um streaming, e outros.
O event-loop é um agente que executa um loop infinito que fica escutando e emitindo eventos.
6. INSTALAÇÃO E CONFIGURAÇÃO
Windows
Faça o download no site http://nodejs.org/download/ e realize a instalação.
Após ter instalado verifique se ocorreu tudo bem.Abra o cmd e execute:
node -v
npm -v
!
Ubuntu
1 - Instale as bibliotecas que precisaremos
sudo apt-get install g++ curl libssl-dev apache2-utils
sudo apt-get install git-core
2 - Obtenha o NodeJS
git clone git://github.com/ry/node.git
cd node
3 - Instale o NodeJS
./configure
make
sudo make install
4 -Verifique se a instalação ocorreu bem
node -v
npm -v
7. O BÁSICO
Iniciando um Projeto
!
mkdir helloworld && cd helloworld
npm init
!
package.json
Após a inicialização do projeto será gerado um arquivo chamado package.json. Esse é o arquivo usado pelo node para armazenar algumas informações e as
dependências do projeto.
!
{
"name": "helloworld",
"version": "1.0.0",
"description": “Arquivo para iniciar o projeto.”,
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": “Gustavo Correa",
"license": "MIT"
}
!
Criaremos o arquivo helloworld.js para o nosso projeto Olá Mundo! com o conteúdo.
!
console.log(“Olá mundo!”);
!
E rode o comando node helloworld para executar o projeto.
!
8. O BÁSICO
Servidor HTTP
Com node podemos trabalhar com inúmeros protocolos tais como: HTTP, HTTPS, FTP, SSH, DNS,TCP, UDP,
WebSockets e alguns outros disponíveis em módulos não oficiais.
!
O protocolo HTTP é um dos mais utilizados para desenvolvimento de sistemas web e node prover um
módulo nativo.
!
var html = require("html");
!
html.createServer(funciton(req, res){
res.createHeader(200, {"Content-type" : "text/plain"});
res.write("Resposta HTTP!");
res.end();
}).listen(3000);
!
!
!
9. O BÁSICO
Assíncrono x Síncrono
A programação assíncrona permite tirar vantagem da arquitetura não bloqueante do Node.js. Programando de
forma assíncrona as operações do programa ocorrem em paralelo acelerando os eventos de entrada e saída.
Essa técnica utiliza funções callbacks do Javascript, e mantém apenas uma thread diferente como o que ocorre
com o Java, por exemplo. Porém, é importante ressaltar que você não tem nenhum controle sobre a ordem de
execução das operações assíncronas.
!
O Node.js também permite trabalhar de forma síncrona, mas não é aconselhável. Essa forma de programar
não beneficiar a arquitetura do Node e tende a bloqueia a aplicação até a finalização da operação.
!
Síncrono
Assíncrono
!
!
!
10. O BÁSICO
Módulos
Um módulo é qualquer coisa que pode ser carregado com require() em um programa de Node.js.
!
Ex.:
!
// arquivo math.js
var math = {
sum : function(x, y){
return x + y;
},
sub : function(x, y){
return x - y;
},
mult : function(x, y){
return x * y;
},
div : function(x, y){
return x / y;
}
}
module.exports = math;
!
!
// arquivo calculator.js
var calc = require("./math");
console.log("2 + 2 = " + calc.sum(2, 2));
console.log("8 - 4 = " + calc.sub(8, 4));
console.log("4 * 1 = " + calc.mult(2, 2));
console.log("8 / 2 = " + calc.div(8, 2));
11. EXPRESS
HTTP://EXPRESSJS.COM/
Introdução
Express é um framework muito utilizado para quem desenvolve com NodeJS. Ele é minimalista, flexível e
contém um robusto conjunto de recursos para desenvolver aplicações web, como: MVR(Model-View-Routes),
MVC(Model-View-Controller), Roteamento de urls via callbacks, Middleware, Interface RESTful, Suporte a File
Upload,Template Engine e muito mais.
O Express tem um escopo mais simples que frameworks como Rails, Django e CakePHP, ele foi baseado no
Sinatra.
!
Instalação
sudo npm install -g express-generator
Uso
express --css less --ejs newapp
cd newapp && npm install
npm start
Acesso
Acesse a url http://localhost:3000 no navegador.
13. MONGODB
Introdução
O Nodejs possui inúmeros módulos para banco de dados, tanto relacional quando não relacional. Com banco
de dados NoSQL conseguimos tirar um bom proveito da arquitetura do Nodejs criando aplicações realmente
escaláveis.
!
Instalação
Utilizaremos o MongoDB para persistir os logs de nossa API, para tal instalaremos o módulo mongoose.
npm install mongoose --save
Obs.: Para instalação do MongoDB propriamente dito aconselho seguir o guia do site do MongoDB http://
docs.mongodb.org/manual/installation/ .
!
14. NODEJS EM PRODUÇÃO
Serviços para NodeJS
• Heroku
• NodeJitsu
• DigitalOcean
• Getup (Brasileira)
!
Servidor
• Amazon EC2 / Servidor particular
forever - https://github.com/nodejitsu/forever
!
!
!
!
sudo npm install forever -g
forever -m 5 project/to/your/main.js
cd /path/to/your/project
npm install forever-monitor
!
//main.js
var forever = require(“forever-monitor”);
var Monitor = forever.Monitor;
!
var child = new Monitor(“index.js”, {
max : 10, silent : true, kill : true, logFile : “forever.log”,
outFile : “app.log”, errFile : “error.log"
});