Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Javascript no servidor com Node.js

Javascript no servidor com Node.js

Uma introdução a Node.js, apresentando as principais características (e vantagens) da plataforma, seu ecossistema e comunidade crescente. Ao final, apresenta algumas dicas de como aprender Node.js rapidamente.

Other Decks in Technology

Transcript

  1. Conteúdo Conhecendo o Node.js Alguns casos de Node Módulos, NPM

    e package.json Utilitários de linha de comando Frameworks, stacks e ecosistema Referências para aprender Node.js "Futuro" do Javascript e Node.js Ferramentas e apps Node.js
  2. Paulo Diovani Gonçalves Desenvolvedor na Codeminer 42 Acadêmico de graduação

    em Tecnologia em Sistemas para Internet pela Universidade Feevale Usuário GNU/Linux desde 2005 Javascript, PHP, Java, Ruby, Python, Arduino blog.diovani.com slides.diovani.com
  3. Um simples servidor web var http = require('http'); http.createServer(function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/'); Rodando o webserver $ node example.js Server running at http://127.0.0.1:1337/
  4. Javascript (JS) é uma linguagem de programação usada primeiramente por

    web browsers para permitir conteúdo dinâmico em páginas web. Ela pode também ser utilizada no servidor para qualquer tipo de ações. Fonte: MDN
  5. Javascript no servidor não é novidade 4D Wakanda APE project

    Narwhal Joyent NodeJS Sitepoint Persevere RingoJS Aptana Jaxer Node.js Rhino Javascript engine Fonte: stackover ow
  6. Node.js permite escrever aplicações server side com Javascript, incluindo... Aplicações

    web realtime Webservice APIs Aplicações em linha de comando Aplicações desktop (com widgets, CURSES, HTML, etc.)
  7. Por que Node.js? Rápido e escalável Para APIs, mobile, web

    e IoT Baixa curva de aprendizagem Comunidade crescente e participativa Javascript é a linguagem mais popular atualmente ( ) GitHut
  8. LinkedIn muda de Rails para Node: 27 servidores cortados e

    até 20x mais rápido. Fonte: highscalability Obs: existem alguns no artigo original. fatos não mencionados
  9. Como o LinkedIn usou Node.js e HTML5 para construir uma

    app melhor e mais rápida Fonte: venturebeat
  10. PayPal muda de Java para Javascript Java/Spring Node.js Preparação 0

    2 meses Desenvolvimento ~5 meses ~3 meses Equipe 5 5 Linhas de código não especi cado 66% de não especi cado Fonte: infohq
  11. Node.js no PayPal Construído quase 2x mais rápido com menos

    pessoas 33% menos linhas de código 40% menos arquivos Dobradas as requisições por segundo Queda de média de 35% no tempo de resposta Fonte: paypal-enginering
  12. Por que Wallmart está usando Node.js? [...] Executivos do Wallmart

    deixaram claro que o benefício em usar Node.js era, de longe, maior que o risco [...] Fonte: venturebeat
  13. Node.js em chamas [...] notamos que a latência de requisições

    para a aplicação em Node.js aumentava à medida do tempo [...] Culpa do Express? Resposta por hueniverse no GitHub. Fonte: net ix techblog
  14. Node.js é uma plataforma construída sobre o para criar aplicações

    em rede rápidas e escaláveis. Node.js usa um modelo de I/O não bloqueante, orientado a eventos, que o torna leve e e ciente, perfeito para aplicações em tempo real com grande tráfego de dados que rodam através de dispositivos distribuídos. Motor Javascript do Chrome Fonte: nodejs.org
  15. Single threaded Node.js foi desenvolvido para utilizar uma única thread.

    Esta única thread recebe e trata de todas as operações da aplicação.
  16. Non-blocking I/O Cada nova operação não precisa esperar que as

    anteriores sejam completadas. Todas são processadas de forma assíncrona.
  17. Node callbacks Ao se realizar uma operação de IO, passamos

    uma função de callback para a mesma. O callback é executado ao nal da operação, enquanto outras operações são executadas em paralelo.
  18. Um node callback recebe um objeto de erro como primeiro

    argumento e um ou mais argumentos a seguir, contendo o resultado da operação. function myNodeCallback(err, data) { if (err) { //something went wrong return; } //normal flow }
  19. var fs = require('fs'); fs.readFile('./example.txt', function(err, content) { if (err)

    console.error("Ocorreu um erro ao ler o arquivo"); console.log(content.toString()); });
  20. Event driven Muitos objetos em Node.js emitem eventos. net.Server emite

    "connection" a cada vez que um cliente conecta. fs.readStream emite "open" quando o arquivo é aberto.
  21. var http = require('http'); http.get('http://example.com', function(response) { //dados recebidos, loga

    o conteúdo response.on('data', function(data) { console.log(data.toString()); }); //em caso de erro, loga a mensagem response.on('error', function(err) { console.error(err.stack || err); }); });
  22. Uso de Streams Uma stream é uma interface abstrata implementada

    por vários objetos em Node.js. Streams podem ser para leitura, escrita ou ambos. Todas streams são emissores de eventos.
  23. var fs = require("fs"); var filename = 'example.txt'; var stream

    = fs.createReadStream(filename); stream.pipe(process.stdout);
  24. var fs = require("fs"); var zlib = require("zlib"); var iconv

    = require("iconv"); var csv = require("csv-streamify"); var sprintf = require("sprintf"); var es = require("event-stream"); var trumpet = require("trumpet"); var tr = trumpet(); var trOut = fs.createReadStream("input/people_table_tmpl.html") .pipe(tr) .pipe(fs.createWriteStream("output/people.html")); // Read File fs.createReadStream("input/people_euc-jp.csv.gz") // Un-Gzip .pipe(zlib.createGunzip()) // Change Encoding .pipe(new iconv.Iconv("EUC-JP", "UTF-8")) // Parse CSV as Object .pipe(csv({objectMode: true, columns: true})) // Convert Object w/ Sprintf .pipe(es.mapSync(function(data) { return sprintf.sprintf("<tr>" + "<td><a href='%(URL)s'>%(Name)s</a></td>" + "<td>%(City)s</td>" + "</tr>", data); })) // Insert HTML .pipe(tr.select("tbody").createWriteStream()); Brincando com streams em nodestreams.com
  25. WTF is pipe()? # this is also a pipe cat

    /etc/passwd | grep diovani Já estamos acostumados a usar pipes em linha de comando.
  26. Módulos Utilizando CommonJS API Todo script em Node.js é um

    módulo Variáveis e funções declarados em um módulo são sempre privados Um módulo pode exportar um ou mais objetos ou funções atribuindo-os ao objeto module.exports ou exports. Módulos são importados com uso da função require() Módulos externos podem ser instalados com uso do NPM
  27. //my-module.js var MyModule = function() {}; MyModule.prototype.printHello = function() {

    console.log("Hello, World!"); }; MyModule.prototype.printData = function(data) { console.log(data.toString()); }; module.exports = new MyModule();
  28. var net = require('net'); var myModule = require('./my-module'); var server

    = net.createServer(function (socket) { socket.on('data', function(data) { myModule.printData(data); }); }); server.listen(1337, '127.0.0.1');
  29. Módulos podem ser instalados localmente, sob a pasta node_modules/ npm

    install [module_name] ou globalmente (como super-usuário) sudo npm install -g [module_name]
  30. Após instalando, um módulo pode ser importado normalmente com uso

    da função require(). npm install underscore // my-script.js var _ = require('underscore'); _.each([1, 2, 3], console.log); Não é necessário de nir o caminho
  31. Para criar um pacote Node.js em um diretório, digite: npm

    init Você pode editar o arquivo manualmente após a criação. vim package.json
  32. Para instalar dependências e salvá-las na no package.json, basta utilizar

    a opção --save. npm install --save underscore Para instalar todas as dependências previamente salvas no package.json (ao obter fontes do GitHub, por exemplo). npm install
  33. Pacotes em Node.js podem de nir um executável com o

    atributo bin no package.json. Este pacote, quando instaldo globalmente, disponibiliza o executável no PATH, criando um aplicativo.
  34. Instalando jshint via NPM npm install -g jshint Veri cando

    a instalação jshint --version # jshint v2.5.0 Utilizando jshint para validar scripts *.js. jshint myfile.js
  35. Aprendendo Node.js Documentação no site o cial Projeto com lições

    interativas de Node.js Grupo brasileiro de discussão sobre Node.js nodejs.org/documentation nodeschool.io Node.js Brasil @ Google Groups
  36. ECMAScript 6 Suportado desde o Node.js 0.11 com a ag

    --harmony node --harmony app.js Fonte: stackover ow
  37. iojs.org Suporta features do ES6 sem precisar da ag --harmony

    Instalado como opção ao Node por e Parte da Node Foundation desde Maio/2015 nvm n Fonte: iojs.org Fonte: io.js on github
  38. Johnny Five Framework, baseado no para programação de placas controladoras,

    incluindo Arduino (todos os modelos), Beagle Bone, Intel Galileo, Raspberry Pi, Particle, etc. Protocolo Firmata
  39. Créditos da apresentação por Paulo Diovani Gonçalves [email protected] powered by:

    reveal.js http://lab.hakim.se/reveal-js/ Licença Creative Commons Atribuição - Não comercial - Compartilhamento pela mesma licença 4.0 Internacional