Pereira Caio Ribeiro - Node.js. Aplicacoes web real time com Node.js стр 8.

Шрифт
Фон

});

Rode

novamente e faça o teste acessando a url http://localhost:3000/bemvindo , e

também acessando uma outra, diferente desta. Viu o resultado?

Reparem na complexidade do nosso código: o roteamento foi tratado através dos

comandos if e else, e a leitura de url é obtida através da função request.url() que retorna uma string sobre o que foi digitado na barra de endereço do browser. Esses

endereços utilizam padrões para capturar valores na url. Esses padrões são: query

strings ( ?nome=joao) e path ( /admin). Em um projeto maior, tratar todas as urls

dessa maneira seria trabalhoso e confuso demais. No Node.js, existe o módulo nativo

chamado url, que é responsável por fazer parser e formatação de urls. Acompanhe

como capturamos valores de uma query string no exemplo abaixo. Aproveite e crie

o novo arquivo url_server.js:

var http = require('http');

var url = require('url');

var server = http.createServer(function(request, response){

response.writeHead(200, {"Content-Type": "text/html"});

response.write("<h1>Dados da query string</h1>");

var result = url.parse(request.url, true);

16

Casa do Código

Capítulo 2. Desenvolvendo aplicações web

for(var key in result.query){

response.write("<h2>"+key+" : "+result.query[key]+"</h2>");

}

response.end();

});

server.listen(3000, function(){

console.log('Servidor http.');

});

Neste exemplo, a função url.parse(request.url, true) fez um parser da url obtida pela requisição do cliente (request.url).

Esse módulo identifica através do retorno da função url.parser() os seguintes

atributos:

href:

Retorna a url completa:

http://user:pass@host.com:8080/p/a/t/h?

query=string#hash

protocol: Retorna o protocolo: http

host: Retorna o domínio com a porta: host.com:8080

auth: Retorna dados de autenticação: user:pass

hostname: Retorna o domínio: host.com

port: Retorna a porta: 8080

pathname: Retorna os pathnames da url: /p/a/t/h

search: Retorna uma query string: ?query=string

path:

Retorna

a

concatenação

de

pathname

com

query

string:

/p/a/t/h?query=string

query: Retorna uma query string em JSON: {query:string}

hash: Retorna ancora da url: #hash

Resumindo, o módulo url permite organizar todas as urls da aplicação.

17

2.4. Separando o HTML do Javascript

Casa do Código

2.4

Separando o HTML do Javascript

Agora precisamos organizar os códigos HTML, e uma boa prática é separá-los do

Javascript, fazendo com que a aplicação renderize código HTML quando o usuário

solicitar uma determinada rota. Para isso, utilizaremos outro módulo nativo FS (File System). Ele é responsável por manipular arquivos e diretórios do sistema operacional. O mais interessante desse módulo é que ele possui diversas funções de mani-

pulação tanto de forma assíncrona como de forma síncrona. Por padrão, as funções

nomeadas com o final Sync() são para tratamento síncrono. No exemplo abaixo,

apresento as duas maneiras de ler um arquivo utilizando File System:

var fs = require('fs');

fs.readFile('/index.html', function(erro, arquivo){

if (erro) throw erro;

console.log(arquivo);

});

var arquivo = fs.readFileSync('/index.html');

console.log(arquivo);

Diversos módulos do Node.js possuem funções com versões assíncronas e sín-

cronas. O fs.readFile() faz uma leitura assíncrona do arquivo index.html.

Depois que o arquivo foi carregado, é invocado uma função callback para fazer os tra-

tamentos finais, seja de erro ou de retorno do arquivo. Já o fs.readFileSync()

realizou uma leitura síncrona, bloqueando a aplicação até terminar sua leitura e re-

tornar o arquivo.

Limitações do File System nos sistemas operacionais

Um detalhe importante sobre o módulo File System é que ele não é

100% consistente entre os sistemas operacionais. Algumas funções são

específicas para sistemas Linux, OS X, Unix e outras são apenas para Win-

dows.

Para melhores informações leia sua documentação: http://nodejs.

org/api/fs.html

Voltando ao desenvolvimento da nossa aplicação, utilizaremos a função

fs.readFile() para renderizar html de forma assíncrona. Crie um novo arquivo,

chamado site_pessoal.js, com o seguinte código:

18

Casa do Código

Capítulo 2. Desenvolvendo aplicações web

var http = require('http');

var fs = require('fs');

var server = http.createServer(function(request, response){

// A constante __dirname retorna o diretório raiz da aplicação.

fs.readFile(__dirname + '/index.html', function(err, html){

response.writeHeader(200, {'Content-Type': 'text/html'});

response.write(html);

response.end();

});

});

server.listen(3000, function(){

console.log('Executando Site Pessoal');

});

Para que isso funcione, você precisa do arquivo index.html dentro do mesmo

diretório. Segue um exemplo de hello que pode ser utilizado:

<!DOCTYPE html>

<html>

<head>

<title>Olá este é o meu site pessoal!</title>

</head>

<body>

<h1>Bem vindo ao meu site pessoal</h1>

</body>

</html>

Rode o node site_pessoal.js e acesse novamente http://localhost:3000 .

2.5

Desafio: Implementar um roteador de url

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке