SlideShare uma empresa Scribd logo
1 de 76
Baixar para ler offline
Workshop do básico ao avançado
Eduardo 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
JavaScript
JavaScript 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
Joyent
Core 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 nodejs
yum 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 manager
http://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 LOL
function 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ém
function 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');
Conhecendo mais
http://jstherightway.org/
Pausa para o café
Perguntas ?
Conteúdo
● História
● Conhecendo Node.js
● Conhecendo JavaScript
● Node.js Core
● Criando Apps
● Online Apps
● Fazendo deploy
Core API
https://nodejs.org/api/
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 eventos
var 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 SO
STDIN 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 arquivos
Ver 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
Web sockets e Socket.IO
http://socket.io
Protocolo
Cliente
Fallback
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çado
Eduardo Bohrer
@nbluis
https://github.com/nbluis/workshop-nodejs

Mais conteúdo relacionado

Mais procurados

Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
elliando dias
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
Ricardo Longa
 

Mais procurados (20)

Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de Software
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
 
Arquitetura Node com NestJS
Arquitetura Node com NestJSArquitetura Node com NestJS
Arquitetura Node com NestJS
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-Assured
 
Aula 3. frameworks front end
Aula 3. frameworks front endAula 3. frameworks front end
Aula 3. frameworks front end
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Node js Introduction
Node js IntroductionNode js Introduction
Node js Introduction
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Node JS Crash Course
Node JS Crash CourseNode JS Crash Course
Node JS Crash Course
 
Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
 
React Native
React NativeReact Native
React Native
 
Front End x Back End
Front End x Back EndFront End x Back End
Front End x Back End
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
BDD with CucumberJS and WebdriverIO
BDD with CucumberJS and WebdriverIOBDD with CucumberJS and WebdriverIO
BDD with CucumberJS and WebdriverIO
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 

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

T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
Carlos Santos
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
Adler Medrado
 

Semelhante a Node.JS - Workshop do básico ao avançado (20)

Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutençãoZend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutenção
 
Django
DjangoDjango
Django
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Node.js for Noobs
Node.js for NoobsNode.js for Noobs
Node.js for Noobs
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Node js - O poder do JavaScript do lado do servidor
Node js  - O poder do JavaScript do lado do servidorNode js  - O poder do JavaScript do lado do servidor
Node js - O poder do JavaScript do lado do servidor
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015
 

Mais de Eduardo Bohrer

Memória e Garbage Collection na JVM
Memória e Garbage Collection na JVMMemória e Garbage Collection na JVM
Memória e Garbage Collection na JVM
Eduardo Bohrer
 

Mais de Eduardo Bohrer (10)

Monitorando sistemas distribuidos
Monitorando sistemas distribuidosMonitorando sistemas distribuidos
Monitorando sistemas distribuidos
 
Kubernetes - ThoughtWorks Tech Radar 18
Kubernetes - ThoughtWorks Tech Radar 18Kubernetes - ThoughtWorks Tech Radar 18
Kubernetes - ThoughtWorks Tech Radar 18
 
Refatoração - XPConfBR 2015
Refatoração - XPConfBR 2015 Refatoração - XPConfBR 2015
Refatoração - XPConfBR 2015
 
Builds e Pipelines - A arte de automatizar a entrega de software!
Builds e Pipelines - A arte de automatizar a entrega de software!Builds e Pipelines - A arte de automatizar a entrega de software!
Builds e Pipelines - A arte de automatizar a entrega de software!
 
Git para quem gosta de git
Git para quem gosta de gitGit para quem gosta de git
Git para quem gosta de git
 
NoSQL and AWS Dynamodb
NoSQL and AWS DynamodbNoSQL and AWS Dynamodb
NoSQL and AWS Dynamodb
 
uMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançadouMov.me API - Do básico ao avançado
uMov.me API - Do básico ao avançado
 
XSS (Cross site scripting)
XSS (Cross site scripting)XSS (Cross site scripting)
XSS (Cross site scripting)
 
Memória e Garbage Collection na JVM
Memória e Garbage Collection na JVMMemória e Garbage Collection na JVM
Memória e Garbage Collection na JVM
 
Chaos Report - Web Security Version
Chaos Report - Web Security VersionChaos Report - Web Security Version
Chaos Report - Web Security Version
 

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