Nodejs

1,433 views
1,394 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,433
On SlideShare
0
From Embeds
0
Number of Embeds
81
Actions
Shares
0
Downloads
37
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Nodejs

  1. 1. JavaScript all the wayWednesday, May 25, 2011
  2. 2. Wednesday, May 25, 2011
  3. 3. O que é? • node.js foi criado pelo Ryan Dahl em Fevereiro de 2009 •Wednesday, May 25, 2011
  4. 4. O que é? • node.js foi criado pelo Ryan Dahl em Fevereiro de 2009 • http://nodejs.org •Wednesday, May 25, 2011
  5. 5. O que é? • node.js foi criado pelo Ryan Dahl em Fevereiro de 2009 • http://nodejs.org • JoyentWednesday, May 25, 2011
  6. 6. O que é? • Server Side JavaScript runtime •Wednesday, May 25, 2011
  7. 7. O que é? • Server Side JavaScript runtime • Construído sobre o engine V8 JavaScript do Google ChromeWednesday, May 25, 2011
  8. 8. O que é? • Server Side JavaScript runtime • Construído sobre o engine V8 JavaScript do Google Chrome • APIs I/O não bloqueantesWednesday, May 25, 2011
  9. 9. O que é? • Server Side JavaScript runtime • Construído sobre o engine V8 JavaScript do Google Chrome • APIs I/O não bloqueantes • API e módulos simples de extenderWednesday, May 25, 2011
  10. 10. O que é? • Single Thread •Wednesday, May 25, 2011
  11. 11. O que é? • Single Thread • Baseada em eventos •Wednesday, May 25, 2011
  12. 12. O que é? • Single Thread • Baseada em eventos • JavaScript é “A” linguagem :-) •Wednesday, May 25, 2011
  13. 13. O que é? • Single Thread • Baseada em eventos • JavaScript é “A” linguagem :-) • Ok... C++ também é •Wednesday, May 25, 2011
  14. 14. O que é? • Single Thread • Baseada em eventos • JavaScript é “A” linguagem :-) • Ok... C++ também é • standard library baseada em CommonJSWednesday, May 25, 2011
  15. 15. O que é?Wednesday, May 25, 2011
  16. 16. Comunidade • muito popular - 3º repositório mais seguido no github •Wednesday, May 25, 2011
  17. 17. Comunidade • muito popular - 3º repositório mais seguido no github • imensos módulos •Wednesday, May 25, 2011
  18. 18. Comunidade • muito popular - 3º repositório mais seguido no github • imensos módulos • obviamente precisa de maturidade •Wednesday, May 25, 2011
  19. 19. Comunidade • muito popular - 3º repositório mais seguido no github • imensos módulos • obviamente precisa de maturidade • a API ainda não está fechadaWednesday, May 25, 2011
  20. 20. InstalaçãoWednesday, May 25, 2011
  21. 21. Instalação • Linux, Macintosh e Solaris •Wednesday, May 25, 2011
  22. 22. Instalação • Linux, Macintosh e Solaris • a instalação é simples •Wednesday, May 25, 2011
  23. 23. Instalação • Linux, Macintosh e Solaris • a instalação é simples • - pré-requisitos •Wednesday, May 25, 2011
  24. 24. Instalação • Linux, Macintosh e Solaris • a instalação é simples • - pré-requisitos • python v2.4+ •Wednesday, May 25, 2011
  25. 25. Instalação • Linux, Macintosh e Solaris • a instalação é simples • - pré-requisitos • python v2.4+ • libssl-dev (se quiserem usar TLS/SSL) •Wednesday, May 25, 2011
  26. 26. Instalação • Linux, Macintosh e Solaris • a instalação é simples • - pré-requisitos • python v2.4+ • libssl-dev (se quiserem usar TLS/SSL) • Vários métodos alternativos na wikiWednesday, May 25, 2011
  27. 27. Instalação • echo export PATH=$HOME/node/bin:$PATH >> ~/.bashrc • . ~/.bashrc • mkdir ~/node • mkdir ~/latest-install • cd ~/latest-install • curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1 • ./configure --prefix=~/node • make install •Wednesday, May 25, 2011
  28. 28. InstalaçãoWednesday, May 25, 2011
  29. 29. Instalação • Windows... •Wednesday, May 25, 2011
  30. 30. Instalação • Windows... • compilar o node via Cygwin ou MinGW •Wednesday, May 25, 2011
  31. 31. Instalação • Windows... • compilar o node via Cygwin ou MinGW • binários pré-compilados (não permitem a extensão do node com módulos em C++)Wednesday, May 25, 2011
  32. 32. Instalação - OSX • make •Wednesday, May 25, 2011
  33. 33. Instalação - OSX • make • build finished successfully (5m45.658s) •Wednesday, May 25, 2011
  34. 34. Instalação - OSX • make • build finished successfully (5m45.658s) • make install •Wednesday, May 25, 2011
  35. 35. Instalação - OSX • make • build finished successfully (5m45.658s) • make install • install finished successfully (0.988s) •Wednesday, May 25, 2011
  36. 36. Wednesday, May 25, 2011
  37. 37. nodeWednesday, May 25, 2011
  38. 38. node o_teu_ficheiro.jsWednesday, May 25, 2011
  39. 39. API - globalsWednesday, May 25, 2011
  40. 40. API - globals • process • process.env • process.execPath • process.stdout • process.stdin • process.exit()Wednesday, May 25, 2011
  41. 41. API - globals • console • console.log() • console.info() • console.warn() • console.time(label) • console.timeEnd(label)Wednesday, May 25, 2011
  42. 42. API - globals • require • require(‘http’) • require.resolve • require.pathsWednesday, May 25, 2011
  43. 43. API - globals • setTimeout(cb, ms) • clearTimeout(t) • setInterval(cb, ms) • clearInterval(t)Wednesday, May 25, 2011
  44. 44. API - globals...ish • module • __filename • __dirnameWednesday, May 25, 2011
  45. 45. API - modulesWednesday, May 25, 2011
  46. 46. API - modules • para carregar um módulo: • var http = require(‘http’); • CommonJS styleWednesday, May 25, 2011
  47. 47. API - modules • events • emitter.addListener(event, listener) • emitter.on(event, listener) • emitter.once(event, listener) • emitter.removeAllListeners(event) • emitter.emit(event, [arg1], [arg2], [...])Wednesday, May 25, 2011
  48. 48. API - modules • tls • s = tls.connect(port, [host], [options], callback) •Wednesday, May 25, 2011
  49. 49. API - modules • tls - exemplo: •Wednesday, May 25, 2011
  50. 50. API - modules • fs • fs.rename(path1, path2, [callback]) • fs.chmod(path, mode, [callback]) • fs.stat(path, [callback]) • fs.readdir(path, [callback]) • fs.open(path, flags, [mode], [callback])Wednesday, May 25, 2011
  51. 51. API - modules • fs •Wednesday, May 25, 2011
  52. 52. API - modules • path • path.normalize(p) • path.basename(p, [ext]) • path.exists(p, [callback]) • path.existsSync(p) • path.extname(p)Wednesday, May 25, 2011
  53. 53. API - modules • net • net.createServer([options], [connectionListener]) • server.listen(port, [host], [callback]) • socket.connect(port, [host], [callback]) • socket.write(data, [encoding], [callback]) • net.isIP(input)Wednesday, May 25, 2011
  54. 54. API - modules • net - exemplo server •Wednesday, May 25, 2011
  55. 55. API - modules • dgram (UDP) • dgram.createSocket(type, [callback]) • dgram.send(buf, offset, length, path, [callback]) • dgram.address() • dgram.close() •Wednesday, May 25, 2011
  56. 56. API - modules • dgram (UDP) •Wednesday, May 25, 2011
  57. 57. API - modules • dns • dns.lookup(domain, family=null, callback) • dns.resolve(domain, rrtype=A, callback) • dns.reverse(ip, callback) • dns.resolveCname(domain, callback) •Wednesday, May 25, 2011
  58. 58. API - modules • http • http.request(options, callback) • http.get(options, callback) •Wednesday, May 25, 2011
  59. 59. API - modules • https • https.createServer(options, [requestListener]) • https.request(options, callback) • https.get(options, callback) •Wednesday, May 25, 2011
  60. 60. API - modules • url • url.parse(urlStr, parseQueryString=false) • url.format(urlObj) • url.resolve(from, to) •Wednesday, May 25, 2011
  61. 61. API - modules • querystring • querystring.stringify(obj, sep=&, eq==) • querystring.parse(str, sep=&, eq==) • querystring.escape • querystring.unescape •Wednesday, May 25, 2011
  62. 62. API - modules • assert • assert.fail(actual, expected, message, operator) • assert.ok(value, [message]) • assert.throws(block, [error], [message]) • assert.equal(actual, expected, [message]) •Wednesday, May 25, 2011
  63. 63. API - modules • os • os.hostname() • os.release() • os.loadavg() • os.freemem() • os.cpus()Wednesday, May 25, 2011
  64. 64. API - modules • and more... • VM • ChildProcesses • TTY • DebuggerWednesday, May 25, 2011
  65. 65. node.js @ SAPO.ptWednesday, May 25, 2011
  66. 66. node.js @ SAPO.pt • Alarmística • Live feed de notícias • Análise de logsWednesday, May 25, 2011
  67. 67. Exemplos • Audio StreamingWednesday, May 25, 2011
  68. 68. Exemplos • Ler de um ficheiro de logWednesday, May 25, 2011
  69. 69. Wednesday, May 25, 2011
  70. 70. CommonJS • Spec do JavaScript define APIs que são boas para aplicações browser based •Wednesday, May 25, 2011
  71. 71. CommonJS • Spec do JavaScript define APIs que são boas para aplicações browser based • Definir uma API que defina um standard para criações de aplicações: •Wednesday, May 25, 2011
  72. 72. CommonJS • Spec do JavaScript define APIs que são boas para aplicações browser based • Definir uma API que defina um standard para criações de aplicações: • Server Side •Wednesday, May 25, 2011
  73. 73. CommonJS • Spec do JavaScript define APIs que são boas para aplicações browser based • Definir uma API que defina um standard para criações de aplicações: • Server Side • Command LineWednesday, May 25, 2011
  74. 74. CommonJS • Spec do JavaScript define APIs que são boas para aplicações browser based • Definir uma API que defina um standard para criações de aplicações: • Server Side • Command Line • DesktopWednesday, May 25, 2011
  75. 75. CommonJS • node.js é CommonJS compliant •Wednesday, May 25, 2011
  76. 76. node core vs userlandWednesday, May 25, 2011
  77. 77. UserLand modulesWednesday, May 25, 2011
  78. 78. Módulos • npm • curl http://npmjs.org/install.sh | sh • npm help • npm search package • xnpm uninstall • npm installWednesday, May 25, 2011
  79. 79. Módulos • npm • npm install node-inspector • npm install -g node-inspector • npm config • npm updateWednesday, May 25, 2011
  80. 80. Exemplos • Debugging • node-inspector & • node --debug server_example.jsWednesday, May 25, 2011
  81. 81. Módulos • connect • Framework extensível de um Servidor HTTP • Fornece um middleware entre o node e a tua app/framework •Wednesday, May 25, 2011
  82. 82. Módulos • connect quick tour • basicAuth • cookieParser • vhost • faviconWednesday, May 25, 2011
  83. 83. Módulos • connect quick tour • connect({ options here } • connect.logger() • , connect.static(__dirname) • ).listen(443);Wednesday, May 25, 2011
  84. 84. Módulos • connect quick tour • connect( • connect.basicAuth(function(user, pass){ • return tj == user & wahoo == pass; • }) • );Wednesday, May 25, 2011
  85. 85. Módulos • express • web development framework • muito rápido • pequeno codebase • desenvolvido sobre node e connectWednesday, May 25, 2011
  86. 86. Módulos • express quick tour • Helpers para views dinâmicas • Focado em alta performance • Suporte para renders parciais • Executável para criar apps rapidamente • Suporte para notificações instantâneas via SessõesWednesday, May 25, 2011
  87. 87. Módulos • express quick tour • npm install express • var app = express.createServer(); • app.get(/, function(req, res){ • res.send(Hello World); • }); • app.listen(3000);Wednesday, May 25, 2011
  88. 88. Módulos • html5 - a parser • óptimo para fazer parse de páginas html • faz parse de streaming data • html5 parser completoWednesday, May 25, 2011
  89. 89. Módulos • html5 - a parser - quick tour • var parser = new HTML5.Parser({document: window.document}); • var inputfile = fs.readFileSync(doc/jquery-example.html); • parser.parse(inputfile); • jsdom.jQueryify(window, __dirname + /deps/jquery/dist/jquery.js, function (window, jquery) { • Script.runInNewContext(jQuery("p").append("<b>Hi!</b>"), window); • sys.puts(window.document.innerHTML); • });Wednesday, May 25, 2011
  90. 90. Módulos • mysql • Cliente MySQL totalmente em JavaScript • TDD • Simplicidade • Portabilidade • compativel com toda a API de MySQLWednesday, May 25, 2011
  91. 91. Módulos • mysql quick tour • var Client = require(mysql).Client, • client = new Client(), • TEST_DATABASE = nodejs_mysql_test, • TEST_TABLE = test; • client.user = root; • client.password = root; • client.connect(); •Wednesday, May 25, 2011
  92. 92. Módulos • mysql quick tour • client.query( • SELECT * FROM tabela, • function selectCb(err, results, fields) { • if (err) { • throw err; • } • console.log(results); • console.log(fields); • client.end(); • } • );Wednesday, May 25, 2011
  93. 93. Módulos • socket.io • Sockets for the rest of us • WebSocket • WebSocket over Flash (+ XML security policy support) • XHR Polling • XHR Multipart StreamingWednesday, May 25, 2011
  94. 94. Módulos • socket.io quick tour • no servidor • var socket = io.listen(server); • socket.on(connection, function(client){ • client.on(message, function(){ … }) • client.on(disconnect, function(){ … }) • }); •Wednesday, May 25, 2011
  95. 95. Módulos • socket.io quick tour • no cliente • <script src="/socket.io/socket.io.js"></script> • <script> • var socket = new io.Socket(); • socket.connect(); • socket.on(connect, function(){ … }) • socket.on(message, function(){ … }) • socket.on(disconnect, function(){ … }) • </script> •Wednesday, May 25, 2011
  96. 96. Módulos • https://github.com/joyent/node/wiki/ modules • http://search.npmjs.org/ • http://npm.mape.me/ • lots of them!!!Wednesday, May 25, 2011
  97. 97. WebSocketsWednesday, May 25, 2011
  98. 98. WebSockets • ainda é um draft •Wednesday, May 25, 2011
  99. 99. WebSockets • ainda é um draft • mas já podemos usarWednesday, May 25, 2011
  100. 100. WebSockets • ainda é um draft • mas já podemos usar • Chrome, Safari 4 •Wednesday, May 25, 2011
  101. 101. WebSockets • ainda é um draft • mas já podemos usar • Chrome, Safari 4 • Opera e FF desactivaram por preocupações de segurançaWednesday, May 25, 2011
  102. 102. WebSockets • A evolução de Ajax e Comet •Wednesday, May 25, 2011
  103. 103. WebSockets • A evolução de Ajax e Comet • um socket bi-direccional •Wednesday, May 25, 2011
  104. 104. WebSockets • A evolução de Ajax e Comet • um socket bi-direccional • “only Web Sockets provides a native means to accurately and efficiently stream events to and from the browser with negligible latency” •Wednesday, May 25, 2011
  105. 105. Cliente de Chat • html5demos.com by @remy •Wednesday, May 25, 2011
  106. 106. Cliente de Chat • html5demos.com by @remy • vários exemplos de utilização de APIs de html5Wednesday, May 25, 2011
  107. 107. CodeWednesday, May 25, 2011
  108. 108. Last NotesWednesday, May 25, 2011
  109. 109. Diogo Antunes JavaScript developer @ SAPO twitter: @dicode email: diogo.j.antunes@co.sapo.pt im sapo: diogoantunes@sapo.pt http://js.sapo.pt http://libsapojs.blogs.sapo.pt http://dicode.orgWednesday, May 25, 2011
  110. 110. Créditos • A apresentação será disponibilizada no slideshare e se possível na página do evento • Terá toda a informação relativa a créditos de fotos, código fonte e alguma info adicional •Wednesday, May 25, 2011

×