node js - javascript server side
DESCRIPTION
Dicas para inicialização com Node js.TRANSCRIPT
Javascript Server Side
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
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 e Tomcat.
!! Aconselhável Não aconselhável
- API RESTful - Aplicação Real Time (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.
NODEJSSingle-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.
NODEJSEvent-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.
INSTALAÇÃO E CONFIGURAÇÃOWindows
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
O BÁSICOIniciando 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. !
O BÁSICOServidor 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); !!!
O BÁSICOAssí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 !!!
O BÁSICOMó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));
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.
API RESTful para Geração de Logs
MONGODBIntroduçã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/ .
!
NODEJS EM PRODUÇÃOServiç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" });
OBRIGADO!
Palestrante
Gustavo Corrêa Alves
http://www.gustavocalves.com.br
https://github.com/gcajpa
http://br.linkedin.com/in/gustavocorreaalves/
!!