SlideShare une entreprise Scribd logo
1  sur  110
Télécharger pour lire hors ligne
JavaScript all the way




Wednesday, May 25, 2011
Wednesday, May 25, 2011
O que é?
           • node.js foi criado pelo Ryan Dahl em
                  Fevereiro de 2009

           •




Wednesday, May 25, 2011
O que é?
           • node.js foi criado pelo Ryan Dahl em
                  Fevereiro de 2009


           • http://nodejs.org
           •


Wednesday, May 25, 2011
O que é?
           • node.js foi criado pelo Ryan Dahl em
                  Fevereiro de 2009


           • http://nodejs.org

           • Joyent

Wednesday, May 25, 2011
O que é?
           • Server Side JavaScript runtime
           •




Wednesday, May 25, 2011
O que é?
           • Server Side JavaScript runtime
           • Construído sobre o engine V8 JavaScript
                  do Google Chrome




Wednesday, May 25, 2011
O que é?
           • Server Side JavaScript runtime
           • Construído sobre o engine V8 JavaScript
                  do Google Chrome

           • APIs I/O não bloqueantes



Wednesday, May 25, 2011
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 extender


Wednesday, May 25, 2011
O que é?
           • Single Thread
           •




Wednesday, May 25, 2011
O que é?
           • Single Thread
           • Baseada em eventos
           •




Wednesday, May 25, 2011
O que é?
           • Single Thread
           • Baseada em eventos
           • JavaScript é “A” linguagem :-)
           •


Wednesday, May 25, 2011
O que é?
           • Single Thread
           • Baseada em eventos
           • JavaScript é “A” linguagem :-)
           • Ok... C++ também é
           •

Wednesday, May 25, 2011
O que é?
           • Single Thread
           • Baseada em eventos
           • JavaScript é “A” linguagem :-)
           • Ok... C++ também é
           • standard library baseada em CommonJS

Wednesday, May 25, 2011
O que é?




Wednesday, May 25, 2011
Comunidade
           • muito popular - 3º repositório mais
                  seguido no github

           •




Wednesday, May 25, 2011
Comunidade
           • muito popular - 3º repositório mais
                  seguido no github

           • imensos módulos
           •



Wednesday, May 25, 2011
Comunidade
           • muito popular - 3º repositório mais
                  seguido no github

           • imensos módulos
           • obviamente precisa de maturidade
           •


Wednesday, May 25, 2011
Comunidade
           • muito popular - 3º repositório mais
                  seguido no github

           • imensos módulos
           • obviamente precisa de maturidade
           • a API ainda não está fechada


Wednesday, May 25, 2011
Instalação




Wednesday, May 25, 2011
Instalação
           • Linux, Macintosh e Solaris
           •




Wednesday, May 25, 2011
Instalação
           • Linux, Macintosh e Solaris
           • a instalação é simples
           •




Wednesday, May 25, 2011
Instalação
           • Linux, Macintosh e Solaris
           • a instalação é simples
             • - pré-requisitos
           •


Wednesday, May 25, 2011
Instalação
           • Linux, Macintosh e Solaris
           • a instalação é simples
             • - pré-requisitos
                 • python v2.4+
           •

Wednesday, May 25, 2011
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
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 wiki
Wednesday, May 25, 2011
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
Instalação




Wednesday, May 25, 2011
Instalação
           • Windows...
            •




Wednesday, May 25, 2011
Instalação
           • Windows...
            • compilar o node via Cygwin ou MinGW
            •




Wednesday, May 25, 2011
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
Instalação - OSX
           • make
           •




Wednesday, May 25, 2011
Instalação - OSX
           • make
           • 'build' finished successfully (5m45.658s)
           •




Wednesday, May 25, 2011
Instalação - OSX
           • make
           • 'build' finished successfully (5m45.658s)
           • make install
           •


Wednesday, May 25, 2011
Instalação - OSX
           • make
           • 'build' finished successfully (5m45.658s)
           • make install
           • 'install' finished successfully (0.988s)
           •

Wednesday, May 25, 2011
Wednesday, May 25, 2011
node



Wednesday, May 25, 2011
node o_teu_ficheiro.js



Wednesday, May 25, 2011
API - globals




Wednesday, May 25, 2011
API - globals
           • process
            • process.env
            • process.execPath
            • process.stdout
            • process.stdin
            • process.exit()
Wednesday, May 25, 2011
API - globals
           • console
            • console.log()
            • console.info()
            • console.warn()
            • console.time(label)
            • console.timeEnd(label)
Wednesday, May 25, 2011
API - globals
           • require
            • require(‘http’)
           • require.resolve
           • require.paths


Wednesday, May 25, 2011
API - globals
           • setTimeout(cb, ms)
           • clearTimeout(t)
           • setInterval(cb, ms)
           • clearInterval(t)


Wednesday, May 25, 2011
API - globals...ish
           • module
           • __filename
           • __dirname




Wednesday, May 25, 2011
API - modules




Wednesday, May 25, 2011
API - modules
           • para carregar um módulo:
            • var http = require(‘http’);
           • CommonJS style




Wednesday, May 25, 2011
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
API - modules
           • tls
            • s = tls.connect(port, [host], [options],
                          callback)

                •



Wednesday, May 25, 2011
API - modules
           • tls - exemplo:

                •




Wednesday, May 25, 2011
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
API - modules
           • fs
               •




Wednesday, May 25, 2011
API - modules
           • path
            • path.normalize(p)
            • path.basename(p, [ext])
            • path.exists(p, [callback])
            • path.existsSync(p)
            • path.extname(p)
Wednesday, May 25, 2011
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
API - modules
           • net - exemplo server
            •




Wednesday, May 25, 2011
API - modules
           • dgram (UDP)
            • dgram.createSocket(type, [callback])
            • dgram.send(buf, offset, length, path,
                          [callback])

                • dgram.address()
                • dgram.close()
                •
Wednesday, May 25, 2011
API - modules
           • dgram (UDP)
            •




Wednesday, May 25, 2011
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
API - modules
           • http
            • http.request(options, callback)
            • http.get(options, callback)
            •


Wednesday, May 25, 2011
API - modules
           • https
            • https.createServer(options,
                          [requestListener])

                • https.request(options, callback)
                • https.get(options, callback)
                •

Wednesday, May 25, 2011
API - modules
           • url
            • url.parse(urlStr, parseQueryString=false)
            • url.format(urlObj)
            • url.resolve(from, to)
            •

Wednesday, May 25, 2011
API - modules
           • querystring
            • querystring.stringify(obj, sep='&', eq='=')
            • querystring.parse(str, sep='&', eq='=')
            • querystring.escape
            • querystring.unescape
            •
Wednesday, May 25, 2011
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
API - modules
           • os
            • os.hostname()
            • os.release()
            • os.loadavg()
            • os.freemem()
            • os.cpus()
Wednesday, May 25, 2011
API - modules
           • and more...
            • VM
            • ChildProcesses
            • TTY
            • Debugger

Wednesday, May 25, 2011
node.js @ SAPO.pt




Wednesday, May 25, 2011
node.js @ SAPO.pt
           • Alarmística
           • Live feed de notícias
           • Análise de logs




Wednesday, May 25, 2011
Exemplos
           • Audio Streaming




Wednesday, May 25, 2011
Exemplos
           • Ler de um ficheiro de log




Wednesday, May 25, 2011
Wednesday, May 25, 2011
CommonJS
           • Spec do JavaScript define APIs que são
                  boas para aplicações browser based

           •




Wednesday, May 25, 2011
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
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
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

Wednesday, May 25, 2011
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
                • Desktop
Wednesday, May 25, 2011
CommonJS



           • node.js é CommonJS compliant
           •

Wednesday, May 25, 2011
node core vs
                            userland


Wednesday, May 25, 2011
UserLand modules



Wednesday, May 25, 2011
Módulos
           • npm
            • curl http://npmjs.org/install.sh | sh
            • npm help
            • npm search package
            • xnpm uninstall
            • npm install
Wednesday, May 25, 2011
Módulos
           • npm
            • npm install node-inspector
            • npm install -g node-inspector
            • npm config
            • npm update

Wednesday, May 25, 2011
Exemplos
           • Debugging
            • node-inspector &
            • node --debug server_example.js




Wednesday, May 25, 2011
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
Módulos
           • connect quick tour
            • basicAuth
            • cookieParser
            • vhost
            • favicon

Wednesday, May 25, 2011
Módulos
           • connect quick tour
            • connect({ options here }
            • connect.logger()
            • , connect.static(__dirname)
            • ).listen(443);

Wednesday, May 25, 2011
Módulos
           • connect quick tour
            • connect(
            • connect.basicAuth(function(user, pass){
            • return 'tj' == user & 'wahoo' ==
                          pass;

                • })
                • );
Wednesday, May 25, 2011
Módulos
           • express
            • web development framework
            • muito rápido
            • pequeno codebase
            • desenvolvido sobre node e connect

Wednesday, May 25, 2011
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ões

Wednesday, May 25, 2011
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
Módulos
           • html5 - a parser
            • óptimo para fazer parse de páginas html
            • faz parse de streaming data
            • html5 parser completo


Wednesday, May 25, 2011
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
Módulos
           • mysql
            • Cliente MySQL totalmente em JavaScript
            • TDD
            • Simplicidade
            • Portabilidade
            • compativel com toda a API de MySQL
Wednesday, May 25, 2011
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
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
Módulos
           • socket.io
            • Sockets for the rest of us
            • WebSocket
            • WebSocket over Flash (+ XML security
                          policy support)

                • XHR Polling
                • XHR Multipart Streaming
Wednesday, May 25, 2011
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
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
Módulos
           • https://github.com/joyent/node/wiki/
                  modules

           • http://search.npmjs.org/
           • http://npm.mape.me/
           • lots of them!!!


Wednesday, May 25, 2011
WebSockets




Wednesday, May 25, 2011
WebSockets
           • ainda é um draft
           •




Wednesday, May 25, 2011
WebSockets
           • ainda é um draft
           • mas já podemos usar




Wednesday, May 25, 2011
WebSockets
           • ainda é um draft
           • mas já podemos usar
           • Chrome, Safari 4
           •


Wednesday, May 25, 2011
WebSockets
           • ainda é um draft
           • mas já podemos usar
           • Chrome, Safari 4
           • Opera e FF desactivaram por preocupações
                  de segurança




Wednesday, May 25, 2011
WebSockets
           • A evolução de Ajax e Comet
           •




Wednesday, May 25, 2011
WebSockets
           • A evolução de Ajax e Comet
           • um socket bi-direccional
           •




Wednesday, May 25, 2011
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
Cliente de Chat
           • html5demos.com by @remy
           •




Wednesday, May 25, 2011
Cliente de Chat
           • html5demos.com by @remy
           • vários exemplos de utilização de APIs de
                  html5




Wednesday, May 25, 2011
Code




Wednesday, May 25, 2011
Last Notes



Wednesday, May 25, 2011
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.org




Wednesday, May 25, 2011
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

Contenu connexe

Similaire à Node.js: Guia completo sobre o que é, instalação, API e exemplos

TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeStefan Teixeira
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 
Testadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerTestadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerStefan Teixeira
 
O que é o ruby on rails?
O que é o ruby on rails?O que é o ruby on rails?
O que é o ruby on rails?Leonardo Costa
 
TDC2016SP - O que há de novo no Entity Framework Core 1.0
TDC2016SP - O que há de novo no Entity Framework Core 1.0TDC2016SP - O que há de novo no Entity Framework Core 1.0
TDC2016SP - O que há de novo no Entity Framework Core 1.0tdc-globalcode
 
Entity Framework 7.0 a.k.a Entity Core 1.0
Entity Framework 7.0 a.k.a Entity Core 1.0Entity Framework 7.0 a.k.a Entity Core 1.0
Entity Framework 7.0 a.k.a Entity Core 1.0Caliel Costa
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesC. Augusto Proiete
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeStefan Teixeira
 
App Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horasApp Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horasOsvaldo Santana Neto
 
R7 no AWS - Qcon SP 2011
R7 no AWS - Qcon SP 2011R7 no AWS - Qcon SP 2011
R7 no AWS - Qcon SP 2011Roberto Gaiser
 
Microservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesMicroservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesGuilherme Vierno
 
Do monolito aos microserviços com Docker (PHPSP+IMA)
Do monolito aos microserviços com Docker (PHPSP+IMA)Do monolito aos microserviços com Docker (PHPSP+IMA)
Do monolito aos microserviços com Docker (PHPSP+IMA)Wellington Silva
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
TDC2016POA | Trilha .NET - .NET Entity Core 1.0
TDC2016POA | Trilha .NET - .NET Entity Core 1.0TDC2016POA | Trilha .NET - .NET Entity Core 1.0
TDC2016POA | Trilha .NET - .NET Entity Core 1.0tdc-globalcode
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Mobile Conf 2015 - Testes de Unidade com Robolectric
Mobile Conf 2015 - Testes de Unidade com RobolectricMobile Conf 2015 - Testes de Unidade com Robolectric
Mobile Conf 2015 - Testes de Unidade com RobolectricLucas Albuquerque
 

Similaire à Node.js: Guia completo sobre o que é, instalação, API e exemplos (20)

TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 
Testadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerTestadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de Docker
 
O que é o ruby on rails?
O que é o ruby on rails?O que é o ruby on rails?
O que é o ruby on rails?
 
TDC2016SP - O que há de novo no Entity Framework Core 1.0
TDC2016SP - O que há de novo no Entity Framework Core 1.0TDC2016SP - O que há de novo no Entity Framework Core 1.0
TDC2016SP - O que há de novo no Entity Framework Core 1.0
 
Entity Framework 7.0 a.k.a Entity Core 1.0
Entity Framework 7.0 a.k.a Entity Core 1.0Entity Framework 7.0 a.k.a Entity Core 1.0
Entity Framework 7.0 a.k.a Entity Core 1.0
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidades
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
 
Otimização MySQL
Otimização MySQLOtimização MySQL
Otimização MySQL
 
App Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horasApp Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horas
 
R7 no AWS - Qcon SP 2011
R7 no AWS - Qcon SP 2011R7 no AWS - Qcon SP 2011
R7 no AWS - Qcon SP 2011
 
Maven 2
Maven 2Maven 2
Maven 2
 
Microservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesMicroservices em Python: desafios e soluções
Microservices em Python: desafios e soluções
 
Do monolito aos microserviços com Docker (PHPSP+IMA)
Do monolito aos microserviços com Docker (PHPSP+IMA)Do monolito aos microserviços com Docker (PHPSP+IMA)
Do monolito aos microserviços com Docker (PHPSP+IMA)
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
TDC2016POA | Trilha .NET - .NET Entity Core 1.0
TDC2016POA | Trilha .NET - .NET Entity Core 1.0TDC2016POA | Trilha .NET - .NET Entity Core 1.0
TDC2016POA | Trilha .NET - .NET Entity Core 1.0
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
Mobile Conf 2015 - Testes de Unidade com Robolectric
Mobile Conf 2015 - Testes de Unidade com RobolectricMobile Conf 2015 - Testes de Unidade com Robolectric
Mobile Conf 2015 - Testes de Unidade com Robolectric
 

Node.js: Guia completo sobre o que é, instalação, API e exemplos

  • 1. JavaScript all the way Wednesday, May 25, 2011
  • 3. O que é? • node.js foi criado pelo Ryan Dahl em Fevereiro de 2009 • Wednesday, May 25, 2011
  • 4. O que é? • node.js foi criado pelo Ryan Dahl em Fevereiro de 2009 • http://nodejs.org • Wednesday, May 25, 2011
  • 5. O que é? • node.js foi criado pelo Ryan Dahl em Fevereiro de 2009 • http://nodejs.org • Joyent Wednesday, May 25, 2011
  • 6. O que é? • Server Side JavaScript runtime • Wednesday, May 25, 2011
  • 7. O que é? • Server Side JavaScript runtime • Construído sobre o engine V8 JavaScript do Google Chrome Wednesday, May 25, 2011
  • 8. O que é? • Server Side JavaScript runtime • Construído sobre o engine V8 JavaScript do Google Chrome • APIs I/O não bloqueantes Wednesday, May 25, 2011
  • 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 extender Wednesday, May 25, 2011
  • 10. O que é? • Single Thread • Wednesday, May 25, 2011
  • 11. O que é? • Single Thread • Baseada em eventos • Wednesday, May 25, 2011
  • 12. O que é? • Single Thread • Baseada em eventos • JavaScript é “A” linguagem :-) • Wednesday, May 25, 2011
  • 13. O que é? • Single Thread • Baseada em eventos • JavaScript é “A” linguagem :-) • Ok... C++ também é • Wednesday, May 25, 2011
  • 14. O que é? • Single Thread • Baseada em eventos • JavaScript é “A” linguagem :-) • Ok... C++ também é • standard library baseada em CommonJS Wednesday, May 25, 2011
  • 15. O que é? Wednesday, May 25, 2011
  • 16. Comunidade • muito popular - 3º repositório mais seguido no github • Wednesday, May 25, 2011
  • 17. Comunidade • muito popular - 3º repositório mais seguido no github • imensos módulos • Wednesday, May 25, 2011
  • 18. Comunidade • muito popular - 3º repositório mais seguido no github • imensos módulos • obviamente precisa de maturidade • Wednesday, May 25, 2011
  • 19. Comunidade • muito popular - 3º repositório mais seguido no github • imensos módulos • obviamente precisa de maturidade • a API ainda não está fechada Wednesday, May 25, 2011
  • 21. Instalação • Linux, Macintosh e Solaris • Wednesday, May 25, 2011
  • 22. Instalação • Linux, Macintosh e Solaris • a instalação é simples • Wednesday, May 25, 2011
  • 23. Instalação • Linux, Macintosh e Solaris • a instalação é simples • - pré-requisitos • Wednesday, May 25, 2011
  • 24. Instalação • Linux, Macintosh e Solaris • a instalação é simples • - pré-requisitos • python v2.4+ • Wednesday, May 25, 2011
  • 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. 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 wiki Wednesday, May 25, 2011
  • 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
  • 29. Instalação • Windows... • Wednesday, May 25, 2011
  • 30. Instalação • Windows... • compilar o node via Cygwin ou MinGW • Wednesday, May 25, 2011
  • 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. Instalação - OSX • make • Wednesday, May 25, 2011
  • 33. Instalação - OSX • make • 'build' finished successfully (5m45.658s) • Wednesday, May 25, 2011
  • 34. Instalação - OSX • make • 'build' finished successfully (5m45.658s) • make install • Wednesday, May 25, 2011
  • 35. Instalação - OSX • make • 'build' finished successfully (5m45.658s) • make install • 'install' finished successfully (0.988s) • Wednesday, May 25, 2011
  • 39. API - globals Wednesday, May 25, 2011
  • 40. API - globals • process • process.env • process.execPath • process.stdout • process.stdin • process.exit() Wednesday, May 25, 2011
  • 41. API - globals • console • console.log() • console.info() • console.warn() • console.time(label) • console.timeEnd(label) Wednesday, May 25, 2011
  • 42. API - globals • require • require(‘http’) • require.resolve • require.paths Wednesday, May 25, 2011
  • 43. API - globals • setTimeout(cb, ms) • clearTimeout(t) • setInterval(cb, ms) • clearInterval(t) Wednesday, May 25, 2011
  • 44. API - globals...ish • module • __filename • __dirname Wednesday, May 25, 2011
  • 45. API - modules Wednesday, May 25, 2011
  • 46. API - modules • para carregar um módulo: • var http = require(‘http’); • CommonJS style Wednesday, May 25, 2011
  • 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. API - modules • tls • s = tls.connect(port, [host], [options], callback) • Wednesday, May 25, 2011
  • 49. API - modules • tls - exemplo: • Wednesday, May 25, 2011
  • 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. API - modules • fs • Wednesday, May 25, 2011
  • 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. 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. API - modules • net - exemplo server • Wednesday, May 25, 2011
  • 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. API - modules • dgram (UDP) • Wednesday, May 25, 2011
  • 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. API - modules • http • http.request(options, callback) • http.get(options, callback) • Wednesday, May 25, 2011
  • 59. API - modules • https • https.createServer(options, [requestListener]) • https.request(options, callback) • https.get(options, callback) • Wednesday, May 25, 2011
  • 60. API - modules • url • url.parse(urlStr, parseQueryString=false) • url.format(urlObj) • url.resolve(from, to) • Wednesday, May 25, 2011
  • 61. API - modules • querystring • querystring.stringify(obj, sep='&', eq='=') • querystring.parse(str, sep='&', eq='=') • querystring.escape • querystring.unescape • Wednesday, May 25, 2011
  • 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. API - modules • os • os.hostname() • os.release() • os.loadavg() • os.freemem() • os.cpus() Wednesday, May 25, 2011
  • 64. API - modules • and more... • VM • ChildProcesses • TTY • Debugger Wednesday, May 25, 2011
  • 66. node.js @ SAPO.pt • Alarmística • Live feed de notícias • Análise de logs Wednesday, May 25, 2011
  • 67. Exemplos • Audio Streaming Wednesday, May 25, 2011
  • 68. Exemplos • Ler de um ficheiro de log Wednesday, May 25, 2011
  • 70. CommonJS • Spec do JavaScript define APIs que são boas para aplicações browser based • Wednesday, May 25, 2011
  • 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. 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. 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 Wednesday, May 25, 2011
  • 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 • Desktop Wednesday, May 25, 2011
  • 75. CommonJS • node.js é CommonJS compliant • Wednesday, May 25, 2011
  • 76. node core vs userland Wednesday, May 25, 2011
  • 78. Módulos • npm • curl http://npmjs.org/install.sh | sh • npm help • npm search package • xnpm uninstall • npm install Wednesday, May 25, 2011
  • 79. Módulos • npm • npm install node-inspector • npm install -g node-inspector • npm config • npm update Wednesday, May 25, 2011
  • 80. Exemplos • Debugging • node-inspector & • node --debug server_example.js Wednesday, May 25, 2011
  • 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. Módulos • connect quick tour • basicAuth • cookieParser • vhost • favicon Wednesday, May 25, 2011
  • 83. Módulos • connect quick tour • connect({ options here } • connect.logger() • , connect.static(__dirname) • ).listen(443); Wednesday, May 25, 2011
  • 84. Módulos • connect quick tour • connect( • connect.basicAuth(function(user, pass){ • return 'tj' == user &amp; 'wahoo' == pass; • }) • ); Wednesday, May 25, 2011
  • 85. Módulos • express • web development framework • muito rápido • pequeno codebase • desenvolvido sobre node e connect Wednesday, May 25, 2011
  • 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ões Wednesday, May 25, 2011
  • 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. Módulos • html5 - a parser • óptimo para fazer parse de páginas html • faz parse de streaming data • html5 parser completo Wednesday, May 25, 2011
  • 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. Módulos • mysql • Cliente MySQL totalmente em JavaScript • TDD • Simplicidade • Portabilidade • compativel com toda a API de MySQL Wednesday, May 25, 2011
  • 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. 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. Módulos • socket.io • Sockets for the rest of us • WebSocket • WebSocket over Flash (+ XML security policy support) • XHR Polling • XHR Multipart Streaming Wednesday, May 25, 2011
  • 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. 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. Módulos • https://github.com/joyent/node/wiki/ modules • http://search.npmjs.org/ • http://npm.mape.me/ • lots of them!!! Wednesday, May 25, 2011
  • 98. WebSockets • ainda é um draft • Wednesday, May 25, 2011
  • 99. WebSockets • ainda é um draft • mas já podemos usar Wednesday, May 25, 2011
  • 100. WebSockets • ainda é um draft • mas já podemos usar • Chrome, Safari 4 • Wednesday, May 25, 2011
  • 101. WebSockets • ainda é um draft • mas já podemos usar • Chrome, Safari 4 • Opera e FF desactivaram por preocupações de segurança Wednesday, May 25, 2011
  • 102. WebSockets • A evolução de Ajax e Comet • Wednesday, May 25, 2011
  • 103. WebSockets • A evolução de Ajax e Comet • um socket bi-direccional • Wednesday, May 25, 2011
  • 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. Cliente de Chat • html5demos.com by @remy • Wednesday, May 25, 2011
  • 106. Cliente de Chat • html5demos.com by @remy • vários exemplos de utilização de APIs de html5 Wednesday, May 25, 2011
  • 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.org Wednesday, May 25, 2011
  • 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