Download - Node.JS - Workshop do básico ao avançado
Workshop do básico ao avançadoEduardo Bohrer
@nbluis
Exemplos do workshop
Este workshop acompanha alguns exemplos práticos,
publicados em:
https://github.com/nbluis/workshop-nodejs
Temática
● As vezes eu falo demais, me interrompam !
● As vezes eu esqueço das coisas, perguntem !
● Eu sou gentil, não fique com vergonha !
● O maior objetivo é sair sem dúvidas
● A discussão é o melhor aprendizado
● Quanto mais codificarmos melhor
Conteúdo
● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
Conteúdo
● História● Conhecendo Node.js● Conhecendo Javascript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
Os 3 pilares do Node.js
● JavaScript
● V8 Engine
● IO Assíncrono
JavaScript● 1995
● 10 dias
● ECMA
● Microsoft
● JavaScript vs Java
Brendan Eich
JavaScriptJavaScript para browsers - Funciona no IE 6 ?
● jQuery
● Prototype
● Dojo
● MooTools
● Até os dias de hoje (Ember, Angular, React, Backbone)
V8 Engine
Google Chrome / Chromium (Open-Source)
https://code.google.com/p/v8/
Compila o código Javascript para o formato nativo de máquina, permitindo que rode a velocidade de um código binário compilado.
C10k problem
E se o site tiver 10mil usuários simultâneos ?http://www.kegel.com/c10k.html
● Threads
● IO Síncrono
C10k problem
Tempo de acesso a informação
● Cache - 0.5ns
● Memória principal - 100ns
● Disco - 10.000.000ns
C10k problem
● select
● epool
● kqueue
● libevent
IO Assíncrono
Node.js
Mas o que tudo isso tem a ver com Node.js ?
Habemus Node.js
Node.js =
JavaScript + V8 + IO Assincrono
Node.js 2009
● Linguagem (JavaScript)
● Interpretador (V8)
● Um modelo (IO Assíncrono)
● API Base
● Interface de IO
Ryan Dahl
Node.js hoje
Versão 0.12.0
JoyentCore Team
IO.js + Open Governance
Pausa para o café
Perguntas ?
Conteúdo
● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
Instalação
Read the docs !
apt-get install nodejsyum install nodejs
https://nodejs.org/download/
REPL - Read Eval Print Loop
$ node -v
v0.12.0
$ node
> console.log(‘Hello World!’);
Rodando Scripts
$ echo "console.log('Hello World')" >> index.js
$ node index.js
Hello World!
Exemplos mais legais
● Servidor http simples
● Calculadora no console
Modularização
require
● Builtin / API
● Internal
● Third-party
Modularização
Criando um módulo
module.exports
Ver modules-sample
Node.js API
https://nodejs.org/api/
Detalharemos isso mais tarde
NPM.js
Node package managerhttp://npmjs.org
● npm command line● Global vs Local● package.json
Package.json
● Informações básicas● Colaboradores● Dependências● Licenças● Tasks
Pausa para o café
Perguntas ?
Conteúdo
● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
JavaScript
● Tipagem dinâmica
● Orientada a objetos SIM
● Com modelo de protótipos
● Pitadas de linguagem funcional
Funções são tudo
function hello() {
console.log('Hello World!');
}
hello();
Podem ser auto-contidas
(function() {
console.log('Hello World!');
})();
Podem ser variáveis
var myFunction = function() {
console.log('Hello World!');
}
myFunction();
Podem ser parâmetros
function execute(callback) {
callback();
}
execute(function() {
console.log('Hello World!');
});
Podem retornar outras funções
function build() {
return function() {
console.log('Hello World!');
};
}
build()(); // WTF ?
E tudo isso junto também LOLfunction execute(callback) { callback(); }
function build() {
return function() { console.log('Hello World!'); };
}
(function() {
execute(build());
})();
Podem ser instanciadas
function Animal() {}
new Animal();
Podem ter métodos
function Animal() {
this.comer = function() {
console.log('Estou Comendo!');
};
}
new Animal().comer();
Podem ter atributos
function Animal() {
var comeu = false;
this.comer = function() {
comeu = true;
};
}
new Animal().comer();
As vezes até “herança”function Animal() {
this.comer = function() {console.log('Comi!');}
}
function Cachorro() {
Animal.apply(this);
}
new Cachorro().comer();
Sobrescrita de métodos tambémfunction Animal() {
this.comer = function() {console.log('Comi!');}
}
function Cachorro() {
Animal.apply(this);
this.comer = function() {console.log('O cachorro comeu');}
}
new Cachorro().comer();
Podem ter + ou - parâmetros
function escreveNome(nome, sobrenome) {
console.log(nome, sobrenome);
}
escreveNome('João');
escreveNome('João', 'Silva');
Ou ter parâmetros sem ter (Troll)
function escreve() {
console.log(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
};
escreve('JavaScript', 'é', 'coisa', 'do', 'demo');
Pausa para o café
Perguntas ?
Conteúdo
● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
Passada rápida
● EventEmitter● Process● Path e FileSystem● HTTP● Buffers e Streams
Event Emitter
Emissor de eventos por toda a plataforma.Muito utilizado pela Core API e Módulos
externos.
Escutando eventosvar events = require('events'),
eventEmitter = new events.EventEmitter();
eventEmitter.on('meuevento', function() {
console.log('Meu evento aconteceu!');
});
Emitindo eventos
var events = require('events'),
eventEmitter = new events.EventEmitter();
eventEmitter.emit('meuevento');
Criando emissores de evento
Ver exemplo 03-customemitter.js
Node.js e eventos
● Porque eventos estão em todos os lugares ?
● Event Loop / Assíncrono
● Por isso que Javascript + Node.js são legais
● Veremos que toda a API do Node.js é assim
Process
Informações básicas sobre o processo e SOSTDIN e STDOUT
Módulo global, não necessita require
Ver Exemplos 06-process-sample
Path
Utilitário para resolução de caminhos de diretórios e arquivos
Caminho absoluto, caminho relativo, etc.
Exemplos 07-path-sample
File System
Manipulação de arquivosVer exemplos 08-filesystem-samples
Async - Sync - Streams
HTTP
HTTP server e client
Ver exemplos 09 - http-samples
Muitas outras
https://nodejs.org/api/
Cluster, Cripto, Console, Debugger, DNS, Net, Https, OS, Timers, TLS/SSL, UDP, URL, ZLIB
...
Pausa para o café
Perguntas ?
Conteúdo
● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
Express e Kraken
Express - framework web mais utilizado.http://expressjs.com/
Kraken - Framework web criado pelo LinkedIn que junta express com outros frameworks para criar um framework full-stack.http://krakenjs.com/
Iniciando um projeto express
Para este workshop vamos focar no express, afim de entender a base de tudo.
Iniciando um projeto
Hora de botar tudo em prática!
● npm init
● dependências
● npm install
● Lets code….
Definindo rotas
app.get(‘/’, function(req,res) {});
app.post(‘/add’, function(req,res) {});
app.put(‘/update’, function(req,res) {});
Renderizando views
● Template engine
● Renderizando
● Parâmetros
● Conteúdo estático
Acessando banco de dados
● Driver
● Connection
● Query
● Result
● Parâmetros
Modularizando código
Exemplos
● Controllers
● Models
● Helpers
Conteúdo
● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
Web sockets
Spec HTML 5
Quantos canais abertos um servidor suporta ?Event Loop + Async IO
Socket.IO APP
Ver Exemplo 11 - socket.io.sample
Conteúdo
● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy
Deploy em nuvem
Deploy onsite
● Simples
● Preferencialmente Linux
● Instalação básica (gerenciador de pacotes)
● Deploy
● Exposto ou via proxy (NGINX / Apache)
Pausa para o café
Perguntas ?
Workshop do básico ao avançadoEduardo Bohrer
@nbluishttps://github.com/nbluis/workshop-nodejs