NodeJSNodeJS
Prof. Alex Dias Camargo
alexcamargo@ifsul.edu.br
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
SUL-RIO-GRANDENSE
CÂMPUS BAGÉ
PROGRAMAÇÃO PARA WEB II
2
I. Plano de aula
Na aula anterior foi visto:
 Padrão de arquitetura de software MVC
 Definições e aplicação de JSF
PWII - NodeJS
3
I. Plano de aula
Nesta aula será apresentado:
 Conceitos, arquitetura e utilização
 Fundamentos e sintaxe de programação
PWII - NodeJS
4
1. Introdução
Node.js é uma plataforma para desenvolvimento de aplicações
baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.
 Ambiente de execução JavaScript orientado a eventos.
PWII - NodeJS
5
1. Introdução
PWII - NodeJS
Figura. Arquitetura Node
6
1. Introdução
Node.js é uma plataforma para desenvolvimento de aplicações
baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.
 Ambiente de execução JavaScript orientado a eventos.
 Node.js não é um framework, tampouco uma linguagem de
programação; ele é um runtime. Plataforma de I/O.
PWII - NodeJS
7
1. Introdução
PWII - NodeJS
Figura. Exemplos de fontes de I/O com Node
8
1. Introdução
Node.js é uma plataforma para desenvolvimento de aplicações
baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.
 Ambiente de execução JavaScript orientado a eventos.
 Node.js não é um framework, tampouco uma linguagem de
programação; ele é um runtime. Plataforma de I/O.
 JavaScript full stack: aplicável tanto em client-side quanto
em server-side.
PWII - NodeJS
9
1. Introdução
PWII - NodeJS
Figura. JavaScript full stack com Node
10
1. Introdução
PWII - NodeJS
Figura. MEAN stack: coleção de tecnologias
11
1. Introdução
Node.js é uma plataforma para desenvolvimento de aplicações
baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.
 Ambiente de execução JavaScript orientado a eventos.
 Node.js não é um framework, tampouco uma linguagem de
programação; ele é um runtime. Plataforma de I/O.
 JavaScript full stack: aplicável tanto em client-side quanto
em server-side.
 As interações serão executadas através de requisições
assíncronas.
PWII - NodeJS
12
1. Introdução
PWII - NodeJS
Figura. Conexões assíncronas
13
1. Introdução
Node.js é uma plataforma para desenvolvimento de aplicações
baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.
 Ambiente de execução JavaScript orientado a eventos.
 Node.js não é um framework, tampouco uma linguagem de
programação; ele é um runtime. Plataforma de I/O.
 JavaScript full stack: aplicável tanto em client-side quanto
em server-side.
 As interações serão executadas através de requisições
assíncronas.
 A aplicação é executada em uma máquina virtual específica,
chamada V8. A mesma desenvolvida para o Chrome.
PWII - NodeJS
14
1. Introdução
PWII - NodeJS
Figura. Engine V8
15
1. Introdução
PWII - NodeJS
Nota. Que problema o Node pode resolver?
16
2. Instalação
O método apresentado funciona para máquinas Linux desktop e
servidores privados virtuais (VPS).
 Instalação: sudo apt-get install nodejs; sudo apt-get install
nvm. Verifica a versão: node -v
 nvm: nvm install -g <nome-do-pacote>
Para saber a localização global: npm root -g
 Runtime online: https://repl.it/languages/nodejs
PWII - NodeJS
17
2. Instalação
PWII - NodeJS
Figura. Repl.it: Executando o Node online
18
3. Exemplos práticos
 servidor.js: para inicializar um servidor "node server.js"
var http = require('http');
var server = http.createServer();
server.on('request', function(req,res) {

res.writeHead(200, {
 'Content-Type': 'text/html; charset=utf-
8' });
res.end('Executando o node...');
});
server.listen(3000);
console.log('Servidor iniciado em http://127.0.0.1:3000.
Pressione Ctrl+C para encerrar.');
PWII - NodeJS
19
3. Exemplos práticos
 alomundo.js: exibe a mensagem Alô, mundo! (cont.)
// ouve o request e faz as operações
server.listen(3000);
// exibe uma mensagem no terminal
console.log('Servidor iniciado em http://127.0.0.1:3000.
Pressione Ctrl+C para encerrar.');
PWII - NodeJS
20
3. Exemplos práticos
 frases.js: escreve duas frases no terminal, porém uma delas
precisa ser carregada da memória antes de ser impressa.
var frase;
// lê uma determinada frase de uma fonte de dados
carregaFrase = function (callback) {

setTimeout(function() {

// simula a leitura da frase no banco de dados
frase = "Minha frase obstrutiva";
callback();
}, 3000)
}
PWII - NodeJS
21
3. Exemplos práticos
 frases.js: escreve duas frases no terminal, porém uma delas
precisa ser carregada da memória antes de ser impressa.
(cont.)
// imprime o valor de uma determinada variável no console
imprimeFrase = function () {

console.log(frase);
}
carregaFrase(imprimeFrase);
console.log("Olá");
PWII - NodeJS
22
3. Exemplos práticos
 interacao.js: interação com o usuário.
const readline = require('readline').createInterface({

input: process.stdin,
output: process.stdout
})
readline.question(`Qual é o seu nome? `, name => {

console.log(`Oi, ${
name}!`)
readline.close()
})
PWII - NodeJS
23
3. Exemplos práticos
 rotas.js: rotas de navegação web.
// requisita o módulo http
var http = require('http');
// cria um servidor no computador
var server = http.createServer(function(request, response){

// cria o cabeçalho HTML
response.writeHead(200, {
"Content-Type": "text/html"});
PWII - NodeJS
24
3. Exemplos práticos
 rotas.js: rotas de navegação web. (cont.)
// método que retorna uma string sobre o que foi digitado na
url do navegador
//http://localhost:3000
if(request.url == "/"){

response.write("<html><body><h1>Página inicial</h1>");
response.write("<a href='/bemvindo'>Acessar página de
boas-vindas</a>");
response.write("</body></html>");
// http://localhost:3000/bemvindo
}else if(request.url == "/bemvindo"){

response.write("<html><body><h1>Bem-vindo ao Node.js!
</h1>");
PWII - NodeJS
25
3. Exemplos práticos
 rotas.js: rotas de navegação web. (cont.)
response.write("<a href='/'>Acessar a página inicial</a>");
response.write("</body></html>");
}else{

// se não encontrar a url solicitada
response.write("<html><body><h1>Página não
encontrada!</h1>");
response.write("<a href='/'>Acessar a página inicial</a>");
response.write("</body></html>");
}
response.end();
});
PWII - NodeJS
26
3. Exemplos práticos
 rotas.js: rotas de navegação web. (cont.)
// ouve o request e faz as operações
server.listen(3000, function(){

// exibe uma mensagem no terminal
console.log('Executando o servidor HTTP...');
});
PWII - NodeJS
27
4. Fundamentos Node.js
Nesta seção serão abordados os principais conceitos da sintaxe
Node.js, incluindo:
 Como incluir bibliotecas externas via requisição de módulos.
 A função dos callbacks.
 O padrão Event.
 Transmissão de dados "um pedaço de cada vez"
PWII - NodeJS
28
4. Fundamentos Node.js
Modules. O nodejs implementa a interface CommonJS para seus
módulos. É possível carregar outras dependências usando a
palavra-chave require.
var http = require('http');
var dns = require('dns');
var myFile = require('./myFile'); // carrega myFile.js
PWII - NodeJS
29
4. Fundamentos Node.js
Callbacks. Uma função assíncrona invoca um callback (retorno de
chamada), ou seja, uma função geralmente passada como o último
argumento para continuar o programa assim que terminado.
var dns = require('dns');
dns.resolve4('www.google.com', function (err, addresses) {

if (err) throw err;
console.log('addresses: ' + JSON.stringify(addresses));
});
 É passado um retorno de chamada (a função anônima inline)
como o segundo argumento para a função assíncrona
dns.resolve4. Uma vez que a função assíncrona tenha a
resposta, ela invocará o retorno de chamada, continuando,
assim, a execução do programa.
PWII - NodeJS
30
4. Fundamentos Node.js
Events. O padrão de retorno de chamada geralmente funciona
bem para muitos casos. Porém, existem situações que exigem a
notificação de eventos que não ocorrem ao mesmo tempo.
var irc = require('irc');
var client = new irc.Client('irc.freenode.net', 'myIrcBot', {

channels: ['#sample-channel'] });
client.on('error', function(message) {

console.error('error: ', message); });
client.on('connect', function() {

console.log('connected to the irc server'); });
client.on('message', function (from, to, message) {

console.log(from + ' => ' + to + ': ' + message); });
client.on('pm', function (from, message) {

console.log(from + ' => ME: ' + message); });
PWII - NodeJS
31
4. Fundamentos Node.js
Streams. Representam uma interface abstrata para manipular de
forma assíncrona um fluxo contínuo de dados. Assim como os pipes
Unix, implementam um operador de composição chamado pipe().
var crypto = require('crypto');
var fs = require('fs');
var zlib = require('zlib');
var password = new Buffer(process.env.PASS || 'password');
var encryptStream = crypto.createCipher('aes-256-cbc',
password);
PWII - NodeJS
32
4. Fundamentos Node.js
Streams. Representam uma interface abstrata para manipular de
forma assíncrona um fluxo contínuo de dados. Assim como os pipes
Unix, implementam um operador de composição chamado pipe().
var gzip = zlib.createGzip();
var readStream = fs.createReadStream(**filename); // current
file
var writeStream = fs.createWriteStream(**dirname + '/out.gz');
readStream // lê o arquivo corrente
.pipe(encryptStream) // cifra
.pipe(gzip) // comprime
.pipe(writeStream) // escreve o arquivo de saída
.on('finish', function () {
 // confirmação de sucesso
console.log('done');
});
PWII - NodeJS
33
5. Exercícios
1. Responda o quis sobre Node.js disponível em:
https://www.tutorialsteacher.com/online-test/nodejs-test
2. Determine e informe a faixa etária de uma pessoa, a partir do
seu ano de nascimento e do ano atual. Saída no terminal e no
navegador.
Faixas:
0 a 11 anos: criança
12 a 17 anos: adolescente
18 a 64 anos: adulto
65 em diante: idoso
3. Escrever um programa que leia, valores inteiros, até ser lido o
valor -99. Quando isso acontecer, o programa deverá escrever a
soma e a média dos valores lidos. Saída no terminal e no
navegador.
PWII - NodeJS
34
Referências
GEARY, D. M. Core JavaServer Faces. 3ª Edição São Paulo: Alta
Books, 2012.
LUCKOW, D. H.; MELO, A. A. Programação Java para Web:
aprenda a desenvolver uma aplicação financeira pessoal
com as ferramentas mais modernas da plataforma Java. 2ª
Edição. São Paulo: Novatec, 2015.
SIERRA, K. Use a cabeça! JSP & Servlets. 2ª Edição, São Paulo:
Alta Books, 2008.
PWII - NodeJS

Programação para Web II: NodeJS

  • 1.
    NodeJSNodeJS Prof. Alex DiasCamargo alexcamargo@ifsul.edu.br INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA SUL-RIO-GRANDENSE CÂMPUS BAGÉ PROGRAMAÇÃO PARA WEB II
  • 2.
    2 I. Plano deaula Na aula anterior foi visto:  Padrão de arquitetura de software MVC  Definições e aplicação de JSF PWII - NodeJS
  • 3.
    3 I. Plano deaula Nesta aula será apresentado:  Conceitos, arquitetura e utilização  Fundamentos e sintaxe de programação PWII - NodeJS
  • 4.
    4 1. Introdução Node.js éuma plataforma para desenvolvimento de aplicações baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.  Ambiente de execução JavaScript orientado a eventos. PWII - NodeJS
  • 5.
    5 1. Introdução PWII -NodeJS Figura. Arquitetura Node
  • 6.
    6 1. Introdução Node.js éuma plataforma para desenvolvimento de aplicações baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.  Ambiente de execução JavaScript orientado a eventos.  Node.js não é um framework, tampouco uma linguagem de programação; ele é um runtime. Plataforma de I/O. PWII - NodeJS
  • 7.
    7 1. Introdução PWII -NodeJS Figura. Exemplos de fontes de I/O com Node
  • 8.
    8 1. Introdução Node.js éuma plataforma para desenvolvimento de aplicações baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.  Ambiente de execução JavaScript orientado a eventos.  Node.js não é um framework, tampouco uma linguagem de programação; ele é um runtime. Plataforma de I/O.  JavaScript full stack: aplicável tanto em client-side quanto em server-side. PWII - NodeJS
  • 9.
    9 1. Introdução PWII -NodeJS Figura. JavaScript full stack com Node
  • 10.
    10 1. Introdução PWII -NodeJS Figura. MEAN stack: coleção de tecnologias
  • 11.
    11 1. Introdução Node.js éuma plataforma para desenvolvimento de aplicações baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.  Ambiente de execução JavaScript orientado a eventos.  Node.js não é um framework, tampouco uma linguagem de programação; ele é um runtime. Plataforma de I/O.  JavaScript full stack: aplicável tanto em client-side quanto em server-side.  As interações serão executadas através de requisições assíncronas. PWII - NodeJS
  • 12.
    12 1. Introdução PWII -NodeJS Figura. Conexões assíncronas
  • 13.
    13 1. Introdução Node.js éuma plataforma para desenvolvimento de aplicações baseadas em rede utilizando JavaScript e o V8 JavaScript Engine.  Ambiente de execução JavaScript orientado a eventos.  Node.js não é um framework, tampouco uma linguagem de programação; ele é um runtime. Plataforma de I/O.  JavaScript full stack: aplicável tanto em client-side quanto em server-side.  As interações serão executadas através de requisições assíncronas.  A aplicação é executada em uma máquina virtual específica, chamada V8. A mesma desenvolvida para o Chrome. PWII - NodeJS
  • 14.
    14 1. Introdução PWII -NodeJS Figura. Engine V8
  • 15.
    15 1. Introdução PWII -NodeJS Nota. Que problema o Node pode resolver?
  • 16.
    16 2. Instalação O métodoapresentado funciona para máquinas Linux desktop e servidores privados virtuais (VPS).  Instalação: sudo apt-get install nodejs; sudo apt-get install nvm. Verifica a versão: node -v  nvm: nvm install -g <nome-do-pacote> Para saber a localização global: npm root -g  Runtime online: https://repl.it/languages/nodejs PWII - NodeJS
  • 17.
    17 2. Instalação PWII -NodeJS Figura. Repl.it: Executando o Node online
  • 18.
    18 3. Exemplos práticos servidor.js: para inicializar um servidor "node server.js" var http = require('http'); var server = http.createServer(); server.on('request', function(req,res) {
 res.writeHead(200, {
 'Content-Type': 'text/html; charset=utf- 8' }); res.end('Executando o node...'); }); server.listen(3000); console.log('Servidor iniciado em http://127.0.0.1:3000. Pressione Ctrl+C para encerrar.'); PWII - NodeJS
  • 19.
    19 3. Exemplos práticos alomundo.js: exibe a mensagem Alô, mundo! (cont.) // ouve o request e faz as operações server.listen(3000); // exibe uma mensagem no terminal console.log('Servidor iniciado em http://127.0.0.1:3000. Pressione Ctrl+C para encerrar.'); PWII - NodeJS
  • 20.
    20 3. Exemplos práticos frases.js: escreve duas frases no terminal, porém uma delas precisa ser carregada da memória antes de ser impressa. var frase; // lê uma determinada frase de uma fonte de dados carregaFrase = function (callback) {
 setTimeout(function() {
 // simula a leitura da frase no banco de dados frase = "Minha frase obstrutiva"; callback(); }, 3000) } PWII - NodeJS
  • 21.
    21 3. Exemplos práticos frases.js: escreve duas frases no terminal, porém uma delas precisa ser carregada da memória antes de ser impressa. (cont.) // imprime o valor de uma determinada variável no console imprimeFrase = function () {
 console.log(frase); } carregaFrase(imprimeFrase); console.log("Olá"); PWII - NodeJS
  • 22.
    22 3. Exemplos práticos interacao.js: interação com o usuário. const readline = require('readline').createInterface({
 input: process.stdin, output: process.stdout }) readline.question(`Qual é o seu nome? `, name => {
 console.log(`Oi, ${
name}!`) readline.close() }) PWII - NodeJS
  • 23.
    23 3. Exemplos práticos rotas.js: rotas de navegação web. // requisita o módulo http var http = require('http'); // cria um servidor no computador var server = http.createServer(function(request, response){
 // cria o cabeçalho HTML response.writeHead(200, {
"Content-Type": "text/html"}); PWII - NodeJS
  • 24.
    24 3. Exemplos práticos rotas.js: rotas de navegação web. (cont.) // método que retorna uma string sobre o que foi digitado na url do navegador //http://localhost:3000 if(request.url == "/"){
 response.write("<html><body><h1>Página inicial</h1>"); response.write("<a href='/bemvindo'>Acessar página de boas-vindas</a>"); response.write("</body></html>"); // http://localhost:3000/bemvindo }else if(request.url == "/bemvindo"){
 response.write("<html><body><h1>Bem-vindo ao Node.js! </h1>"); PWII - NodeJS
  • 25.
    25 3. Exemplos práticos rotas.js: rotas de navegação web. (cont.) response.write("<a href='/'>Acessar a página inicial</a>"); response.write("</body></html>"); }else{
 // se não encontrar a url solicitada response.write("<html><body><h1>Página não encontrada!</h1>"); response.write("<a href='/'>Acessar a página inicial</a>"); response.write("</body></html>"); } response.end(); }); PWII - NodeJS
  • 26.
    26 3. Exemplos práticos rotas.js: rotas de navegação web. (cont.) // ouve o request e faz as operações server.listen(3000, function(){
 // exibe uma mensagem no terminal console.log('Executando o servidor HTTP...'); }); PWII - NodeJS
  • 27.
    27 4. Fundamentos Node.js Nestaseção serão abordados os principais conceitos da sintaxe Node.js, incluindo:  Como incluir bibliotecas externas via requisição de módulos.  A função dos callbacks.  O padrão Event.  Transmissão de dados "um pedaço de cada vez" PWII - NodeJS
  • 28.
    28 4. Fundamentos Node.js Modules.O nodejs implementa a interface CommonJS para seus módulos. É possível carregar outras dependências usando a palavra-chave require. var http = require('http'); var dns = require('dns'); var myFile = require('./myFile'); // carrega myFile.js PWII - NodeJS
  • 29.
    29 4. Fundamentos Node.js Callbacks.Uma função assíncrona invoca um callback (retorno de chamada), ou seja, uma função geralmente passada como o último argumento para continuar o programa assim que terminado. var dns = require('dns'); dns.resolve4('www.google.com', function (err, addresses) {
 if (err) throw err; console.log('addresses: ' + JSON.stringify(addresses)); });  É passado um retorno de chamada (a função anônima inline) como o segundo argumento para a função assíncrona dns.resolve4. Uma vez que a função assíncrona tenha a resposta, ela invocará o retorno de chamada, continuando, assim, a execução do programa. PWII - NodeJS
  • 30.
    30 4. Fundamentos Node.js Events.O padrão de retorno de chamada geralmente funciona bem para muitos casos. Porém, existem situações que exigem a notificação de eventos que não ocorrem ao mesmo tempo. var irc = require('irc'); var client = new irc.Client('irc.freenode.net', 'myIrcBot', {
 channels: ['#sample-channel'] }); client.on('error', function(message) {
 console.error('error: ', message); }); client.on('connect', function() {
 console.log('connected to the irc server'); }); client.on('message', function (from, to, message) {
 console.log(from + ' => ' + to + ': ' + message); }); client.on('pm', function (from, message) {
 console.log(from + ' => ME: ' + message); }); PWII - NodeJS
  • 31.
    31 4. Fundamentos Node.js Streams.Representam uma interface abstrata para manipular de forma assíncrona um fluxo contínuo de dados. Assim como os pipes Unix, implementam um operador de composição chamado pipe(). var crypto = require('crypto'); var fs = require('fs'); var zlib = require('zlib'); var password = new Buffer(process.env.PASS || 'password'); var encryptStream = crypto.createCipher('aes-256-cbc', password); PWII - NodeJS
  • 32.
    32 4. Fundamentos Node.js Streams.Representam uma interface abstrata para manipular de forma assíncrona um fluxo contínuo de dados. Assim como os pipes Unix, implementam um operador de composição chamado pipe(). var gzip = zlib.createGzip(); var readStream = fs.createReadStream(**filename); // current file var writeStream = fs.createWriteStream(**dirname + '/out.gz'); readStream // lê o arquivo corrente .pipe(encryptStream) // cifra .pipe(gzip) // comprime .pipe(writeStream) // escreve o arquivo de saída .on('finish', function () {
 // confirmação de sucesso console.log('done'); }); PWII - NodeJS
  • 33.
    33 5. Exercícios 1. Respondao quis sobre Node.js disponível em: https://www.tutorialsteacher.com/online-test/nodejs-test 2. Determine e informe a faixa etária de uma pessoa, a partir do seu ano de nascimento e do ano atual. Saída no terminal e no navegador. Faixas: 0 a 11 anos: criança 12 a 17 anos: adolescente 18 a 64 anos: adulto 65 em diante: idoso 3. Escrever um programa que leia, valores inteiros, até ser lido o valor -99. Quando isso acontecer, o programa deverá escrever a soma e a média dos valores lidos. Saída no terminal e no navegador. PWII - NodeJS
  • 34.
    34 Referências GEARY, D. M.Core JavaServer Faces. 3ª Edição São Paulo: Alta Books, 2012. LUCKOW, D. H.; MELO, A. A. Programação Java para Web: aprenda a desenvolver uma aplicação financeira pessoal com as ferramentas mais modernas da plataforma Java. 2ª Edição. São Paulo: Novatec, 2015. SIERRA, K. Use a cabeça! JSP & Servlets. 2ª Edição, São Paulo: Alta Books, 2008. PWII - NodeJS