Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,446 views

Published on

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

Workshop que realizo sobre Node.JS in-company.
Exemplos deste workshop estão disponíveis no seguinte endereço.
https://github.com/nbluis/workshop-nodejs

Published in: Software

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

  1. 1. Workshop do básico ao avançado Eduardo Bohrer @nbluis
  2. 2. Exemplos do workshop Este workshop acompanha alguns exemplos práticos, publicados em: https://github.com/nbluis/workshop-nodejs
  3. 3. 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
  4. 4. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo JavaScript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  5. 5. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo Javascript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  6. 6. Os 3 pilares do Node.js ● JavaScript ● V8 Engine ● IO Assíncrono
  7. 7. JavaScript ● 1995 ● 10 dias ● ECMA ● Microsoft ● JavaScript vs Java Brendan Eich
  8. 8. JavaScript JavaScript para browsers - Funciona no IE 6 ? ● jQuery ● Prototype ● Dojo ● MooTools ● Até os dias de hoje (Ember, Angular, React, Backbone)
  9. 9. 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.
  10. 10. C10k problem E se o site tiver 10mil usuários simultâneos ? http://www.kegel.com/c10k.html ● Threads ● IO Síncrono
  11. 11. C10k problem Tempo de acesso a informação ● Cache - 0.5ns ● Memória principal - 100ns ● Disco - 10.000.000ns
  12. 12. C10k problem ● select ● epool ● kqueue ● libevent IO Assíncrono
  13. 13. Node.js Mas o que tudo isso tem a ver com Node.js ?
  14. 14. Habemus Node.js Node.js = JavaScript + V8 + IO Assincrono
  15. 15. Node.js 2009 ● Linguagem (JavaScript) ● Interpretador (V8) ● Um modelo (IO Assíncrono) ● API Base ● Interface de IO Ryan Dahl
  16. 16. Node.js hoje Versão 0.12.0 Joyent Core Team IO.js + Open Governance
  17. 17. Pausa para o café Perguntas ?
  18. 18. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo JavaScript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  19. 19. Instalação Read the docs ! apt-get install nodejs yum install nodejs https://nodejs.org/download/
  20. 20. REPL - Read Eval Print Loop $ node -v v0.12.0 $ node > console.log(‘Hello World!’);
  21. 21. Rodando Scripts $ echo "console.log('Hello World')" >> index.js $ node index.js Hello World!
  22. 22. Exemplos mais legais ● Servidor http simples ● Calculadora no console
  23. 23. Modularização require ● Builtin / API ● Internal ● Third-party
  24. 24. Modularização Criando um módulo module.exports Ver modules-sample
  25. 25. Node.js API https://nodejs.org/api/ Detalharemos isso mais tarde
  26. 26. NPM.js Node package manager http://npmjs.org ● npm command line ● Global vs Local ● package.json
  27. 27. Package.json ● Informações básicas ● Colaboradores ● Dependências ● Licenças ● Tasks
  28. 28. Pausa para o café Perguntas ?
  29. 29. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo JavaScript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  30. 30. JavaScript ● Tipagem dinâmica ● Orientada a objetos SIM ● Com modelo de protótipos ● Pitadas de linguagem funcional
  31. 31. Funções são tudo function hello() { console.log('Hello World!'); } hello();
  32. 32. Podem ser auto-contidas (function() { console.log('Hello World!'); })();
  33. 33. Podem ser variáveis var myFunction = function() { console.log('Hello World!'); } myFunction();
  34. 34. Podem ser parâmetros function execute(callback) { callback(); } execute(function() { console.log('Hello World!'); });
  35. 35. Podem retornar outras funções function build() { return function() { console.log('Hello World!'); }; } build()(); // WTF ?
  36. 36. E tudo isso junto também LOL function execute(callback) { callback(); } function build() { return function() { console.log('Hello World!'); }; } (function() { execute(build()); })();
  37. 37. Podem ser instanciadas function Animal() {} new Animal();
  38. 38. Podem ter métodos function Animal() { this.comer = function() { console.log('Estou Comendo!'); }; } new Animal().comer();
  39. 39. Podem ter atributos function Animal() { var comeu = false; this.comer = function() { comeu = true; }; } new Animal().comer();
  40. 40. As vezes até “herança” function Animal() { this.comer = function() {console.log('Comi!');} } function Cachorro() { Animal.apply(this); } new Cachorro().comer();
  41. 41. 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();
  42. 42. Podem ter + ou - parâmetros function escreveNome(nome, sobrenome) { console.log(nome, sobrenome); } escreveNome('João'); escreveNome('João', 'Silva');
  43. 43. 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');
  44. 44. Conhecendo mais http://jstherightway.org/
  45. 45. Pausa para o café Perguntas ?
  46. 46. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo JavaScript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  47. 47. Core API https://nodejs.org/api/
  48. 48. Passada rápida ● EventEmitter ● Process ● Path e FileSystem ● HTTP ● Buffers e Streams
  49. 49. Event Emitter Emissor de eventos por toda a plataforma. Muito utilizado pela Core API e Módulos externos.
  50. 50. Escutando eventos var events = require('events'), eventEmitter = new events.EventEmitter(); eventEmitter.on('meuevento', function() { console.log('Meu evento aconteceu!'); });
  51. 51. Emitindo eventos var events = require('events'), eventEmitter = new events.EventEmitter(); eventEmitter.emit('meuevento');
  52. 52. Criando emissores de evento Ver exemplo 03-customemitter.js
  53. 53. 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
  54. 54. 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
  55. 55. Path Utilitário para resolução de caminhos de diretórios e arquivos Caminho absoluto, caminho relativo, etc. Exemplos 07-path-sample
  56. 56. File System Manipulação de arquivos Ver exemplos 08-filesystem-samples Async - Sync - Streams
  57. 57. HTTP HTTP server e client Ver exemplos 09 - http-samples
  58. 58. Muitas outras https://nodejs.org/api/ Cluster, Cripto, Console, Debugger, DNS, Net, Https, OS, Timers, TLS/SSL, UDP, URL, ZLIB ...
  59. 59. Pausa para o café Perguntas ?
  60. 60. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo JavaScript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  61. 61. 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/
  62. 62. Iniciando um projeto express Para este workshop vamos focar no express, afim de entender a base de tudo.
  63. 63. Iniciando um projeto Hora de botar tudo em prática! ● npm init ● dependências ● npm install ● Lets code….
  64. 64. Definindo rotas app.get(‘/’, function(req,res) {}); app.post(‘/add’, function(req,res) {}); app.put(‘/update’, function(req,res) {});
  65. 65. Renderizando views ● Template engine ● Renderizando ● Parâmetros ● Conteúdo estático
  66. 66. Acessando banco de dados ● Driver ● Connection ● Query ● Result ● Parâmetros
  67. 67. Modularizando código Exemplos ● Controllers ● Models ● Helpers
  68. 68. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo JavaScript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  69. 69. Web sockets Spec HTML 5 Quantos canais abertos um servidor suporta ? Event Loop + Async IO
  70. 70. Web sockets e Socket.IO http://socket.io Protocolo Cliente Fallback
  71. 71. Socket.IO APP Ver Exemplo 11 - socket.io.sample
  72. 72. Conteúdo ● História ● Conhecendo Node.js ● Conhecendo JavaScript ● Node.js Core ● Criando Apps ● Online Apps ● Fazendo deploy
  73. 73. Deploy em nuvem
  74. 74. Deploy onsite ● Simples ● Preferencialmente Linux ● Instalação básica (gerenciador de pacotes) ● Deploy ● Exposto ou via proxy (NGINX / Apache)
  75. 75. Pausa para o café Perguntas ?
  76. 76. Workshop do básico ao avançado Eduardo Bohrer @nbluis https://github.com/nbluis/workshop-nodejs

×