Node.JS - Workshop do básico ao avançado

76
Workshop do básico ao avançado Eduardo Bohrer @nbluis

Transcript of Node.JS - Workshop do básico ao avançado

Page 1: Node.JS - Workshop do básico ao avançado

Workshop do básico ao avançadoEduardo Bohrer

@nbluis

Page 2: Node.JS - Workshop do básico ao avançado

Exemplos do workshop

Este workshop acompanha alguns exemplos práticos,

publicados em:

https://github.com/nbluis/workshop-nodejs

Page 3: Node.JS - Workshop do básico ao avançado

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

Page 4: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 5: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo Javascript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 6: Node.JS - Workshop do básico ao avançado

Os 3 pilares do Node.js

● JavaScript

● V8 Engine

● IO Assíncrono

Page 7: Node.JS - Workshop do básico ao avançado

JavaScript● 1995

● 10 dias

● ECMA

● Microsoft

● JavaScript vs Java

Brendan Eich

Page 8: Node.JS - Workshop do básico ao avançado

JavaScriptJavaScript para browsers - Funciona no IE 6 ?

● jQuery

● Prototype

● Dojo

● MooTools

● Até os dias de hoje (Ember, Angular, React, Backbone)

Page 9: Node.JS - Workshop do básico ao avançado

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.

Page 10: Node.JS - Workshop do básico ao avançado

C10k problem

E se o site tiver 10mil usuários simultâneos ?http://www.kegel.com/c10k.html

● Threads

● IO Síncrono

Page 11: Node.JS - Workshop do básico ao avançado

C10k problem

Tempo de acesso a informação

● Cache - 0.5ns

● Memória principal - 100ns

● Disco - 10.000.000ns

Page 12: Node.JS - Workshop do básico ao avançado

C10k problem

● select

● epool

● kqueue

● libevent

IO Assíncrono

Page 13: Node.JS - Workshop do básico ao avançado

Node.js

Mas o que tudo isso tem a ver com Node.js ?

Page 14: Node.JS - Workshop do básico ao avançado

Habemus Node.js

Node.js =

JavaScript + V8 + IO Assincrono

Page 15: Node.JS - Workshop do básico ao avançado

Node.js 2009

● Linguagem (JavaScript)

● Interpretador (V8)

● Um modelo (IO Assíncrono)

● API Base

● Interface de IO

Ryan Dahl

Page 16: Node.JS - Workshop do básico ao avançado

Node.js hoje

Versão 0.12.0

JoyentCore Team

IO.js + Open Governance

Page 17: Node.JS - Workshop do básico ao avançado

Pausa para o café

Perguntas ?

Page 18: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 19: Node.JS - Workshop do básico ao avançado

Instalação

Read the docs !

apt-get install nodejsyum install nodejs

https://nodejs.org/download/

Page 20: Node.JS - Workshop do básico ao avançado

REPL - Read Eval Print Loop

$ node -v

v0.12.0

$ node

> console.log(‘Hello World!’);

Page 21: Node.JS - Workshop do básico ao avançado

Rodando Scripts

$ echo "console.log('Hello World')" >> index.js

$ node index.js

Hello World!

Page 22: Node.JS - Workshop do básico ao avançado

Exemplos mais legais

● Servidor http simples

● Calculadora no console

Page 23: Node.JS - Workshop do básico ao avançado

Modularização

require

● Builtin / API

● Internal

● Third-party

Page 24: Node.JS - Workshop do básico ao avançado

Modularização

Criando um módulo

module.exports

Ver modules-sample

Page 25: Node.JS - Workshop do básico ao avançado

Node.js API

https://nodejs.org/api/

Detalharemos isso mais tarde

Page 26: Node.JS - Workshop do básico ao avançado

NPM.js

Node package managerhttp://npmjs.org

● npm command line● Global vs Local● package.json

Page 27: Node.JS - Workshop do básico ao avançado

Package.json

● Informações básicas● Colaboradores● Dependências● Licenças● Tasks

Page 28: Node.JS - Workshop do básico ao avançado

Pausa para o café

Perguntas ?

Page 29: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 30: Node.JS - Workshop do básico ao avançado

JavaScript

● Tipagem dinâmica

● Orientada a objetos SIM

● Com modelo de protótipos

● Pitadas de linguagem funcional

Page 31: Node.JS - Workshop do básico ao avançado

Funções são tudo

function hello() {

console.log('Hello World!');

}

hello();

Page 32: Node.JS - Workshop do básico ao avançado

Podem ser auto-contidas

(function() {

console.log('Hello World!');

})();

Page 33: Node.JS - Workshop do básico ao avançado

Podem ser variáveis

var myFunction = function() {

console.log('Hello World!');

}

myFunction();

Page 34: Node.JS - Workshop do básico ao avançado

Podem ser parâmetros

function execute(callback) {

callback();

}

execute(function() {

console.log('Hello World!');

});

Page 35: Node.JS - Workshop do básico ao avançado

Podem retornar outras funções

function build() {

return function() {

console.log('Hello World!');

};

}

build()(); // WTF ?

Page 36: Node.JS - Workshop do básico ao avançado

E tudo isso junto também LOLfunction execute(callback) { callback(); }

function build() {

return function() { console.log('Hello World!'); };

}

(function() {

execute(build());

})();

Page 37: Node.JS - Workshop do básico ao avançado

Podem ser instanciadas

function Animal() {}

new Animal();

Page 38: Node.JS - Workshop do básico ao avançado

Podem ter métodos

function Animal() {

this.comer = function() {

console.log('Estou Comendo!');

};

}

new Animal().comer();

Page 39: Node.JS - Workshop do básico ao avançado

Podem ter atributos

function Animal() {

var comeu = false;

this.comer = function() {

comeu = true;

};

}

new Animal().comer();

Page 40: Node.JS - Workshop do básico ao avançado

As vezes até “herança”function Animal() {

this.comer = function() {console.log('Comi!');}

}

function Cachorro() {

Animal.apply(this);

}

new Cachorro().comer();

Page 41: Node.JS - Workshop do básico ao avançado

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();

Page 42: Node.JS - Workshop do básico ao avançado

Podem ter + ou - parâmetros

function escreveNome(nome, sobrenome) {

console.log(nome, sobrenome);

}

escreveNome('João');

escreveNome('João', 'Silva');

Page 43: Node.JS - Workshop do básico ao avançado

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');

Page 44: Node.JS - Workshop do básico ao avançado

Conhecendo mais

http://jstherightway.org/

Page 45: Node.JS - Workshop do básico ao avançado

Pausa para o café

Perguntas ?

Page 46: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 47: Node.JS - Workshop do básico ao avançado

Core API

https://nodejs.org/api/

Page 48: Node.JS - Workshop do básico ao avançado

Passada rápida

● EventEmitter● Process● Path e FileSystem● HTTP● Buffers e Streams

Page 49: Node.JS - Workshop do básico ao avançado

Event Emitter

Emissor de eventos por toda a plataforma.Muito utilizado pela Core API e Módulos

externos.

Page 50: Node.JS - Workshop do básico ao avançado

Escutando eventosvar events = require('events'),

eventEmitter = new events.EventEmitter();

eventEmitter.on('meuevento', function() {

console.log('Meu evento aconteceu!');

});

Page 51: Node.JS - Workshop do básico ao avançado

Emitindo eventos

var events = require('events'),

eventEmitter = new events.EventEmitter();

eventEmitter.emit('meuevento');

Page 52: Node.JS - Workshop do básico ao avançado

Criando emissores de evento

Ver exemplo 03-customemitter.js

Page 53: Node.JS - Workshop do básico ao avançado

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

Page 54: Node.JS - Workshop do básico ao avançado

Process

Informações básicas sobre o processo e SOSTDIN e STDOUT

Módulo global, não necessita require

Ver Exemplos 06-process-sample

Page 55: Node.JS - Workshop do básico ao avançado

Path

Utilitário para resolução de caminhos de diretórios e arquivos

Caminho absoluto, caminho relativo, etc.

Exemplos 07-path-sample

Page 56: Node.JS - Workshop do básico ao avançado

File System

Manipulação de arquivosVer exemplos 08-filesystem-samples

Async - Sync - Streams

Page 57: Node.JS - Workshop do básico ao avançado

HTTP

HTTP server e client

Ver exemplos 09 - http-samples

Page 58: Node.JS - Workshop do básico ao avançado

Muitas outras

https://nodejs.org/api/

Cluster, Cripto, Console, Debugger, DNS, Net, Https, OS, Timers, TLS/SSL, UDP, URL, ZLIB

...

Page 59: Node.JS - Workshop do básico ao avançado

Pausa para o café

Perguntas ?

Page 60: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 61: Node.JS - Workshop do básico ao avançado

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/

Page 62: Node.JS - Workshop do básico ao avançado

Iniciando um projeto express

Para este workshop vamos focar no express, afim de entender a base de tudo.

Page 63: Node.JS - Workshop do básico ao avançado

Iniciando um projeto

Hora de botar tudo em prática!

● npm init

● dependências

● npm install

● Lets code….

Page 64: Node.JS - Workshop do básico ao avançado

Definindo rotas

app.get(‘/’, function(req,res) {});

app.post(‘/add’, function(req,res) {});

app.put(‘/update’, function(req,res) {});

Page 65: Node.JS - Workshop do básico ao avançado

Renderizando views

● Template engine

● Renderizando

● Parâmetros

● Conteúdo estático

Page 66: Node.JS - Workshop do básico ao avançado

Acessando banco de dados

● Driver

● Connection

● Query

● Result

● Parâmetros

Page 67: Node.JS - Workshop do básico ao avançado

Modularizando código

Exemplos

● Controllers

● Models

● Helpers

Page 68: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 69: Node.JS - Workshop do básico ao avançado

Web sockets

Spec HTML 5

Quantos canais abertos um servidor suporta ?Event Loop + Async IO

Page 70: Node.JS - Workshop do básico ao avançado

Web sockets e Socket.IO

http://socket.ioProtocolo

ClienteFallback

Page 71: Node.JS - Workshop do básico ao avançado

Socket.IO APP

Ver Exemplo 11 - socket.io.sample

Page 72: Node.JS - Workshop do básico ao avançado

Conteúdo

● História● Conhecendo Node.js● Conhecendo JavaScript● Node.js Core● Criando Apps● Online Apps● Fazendo deploy

Page 73: Node.JS - Workshop do básico ao avançado

Deploy em nuvem

Page 74: Node.JS - Workshop do básico ao avançado

Deploy onsite

● Simples

● Preferencialmente Linux

● Instalação básica (gerenciador de pacotes)

● Deploy

● Exposto ou via proxy (NGINX / Apache)

Page 75: Node.JS - Workshop do básico ao avançado

Pausa para o café

Perguntas ?

Page 76: Node.JS - Workshop do básico ao avançado

Workshop do básico ao avançadoEduardo Bohrer

@nbluishttps://github.com/nbluis/workshop-nodejs