O documento apresenta os conceitos e fundamentos do Node.js, incluindo sua arquitetura orientada a eventos, utilização de JavaScript no servidor e clientes, e exemplos de código para criação de servidores, rotas e interação com usuário.
Aula 04 - Injeção de código (Cross-Site Scripting)
Programação para Web II: NodeJS
1. 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. 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. 3
I. Plano de aula
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
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
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
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
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
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
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. 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. 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. 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