Criando servidor Http e rotas simples com Node.js

Tempo de Leitura ~5 minutos

Hoje vou mostrar a vocês a como criar um servidor Http com node.js para exibir um html, vou ensinar isso a vocês pois nas próximas postagens vamos criar algumas paginas html que vão se comunicar com o Arduino via node.js, então se preparem!

Antes de tudo, vamos criar uma pasta aonde guardaremos o nosso projeto http, feito isso crie um arquivo com o nome de app.js, abra ele com seu editor favorito e vamos aos códigos!

Primeiramente vamos definir o modulo http, que não precisamos instalar ele pelo npm pois o node.js já tem ele nativamente! então basta vc fazer o require:

var http = require("http");

Para carregar o nosso arquivo html (que ainda vamos criar!) vamos usar um outro modulo nativo do Node.js chamado FS (File System), então vamos chamalo:

var fs = require("fs");

feito isso vamos criar uma função que vai ser o nosso servidor http:

function servidor(requisicao. resposta){
  //código a seguir vai aqui dentro
}

Toda vez que um navegador acessa nossa pagina é essa função que vai dizer o que fazer, para isso passamos o parâmetro requisicao e resposta a requisição é o pedido do navegador ao nosso servidor (por assim dizer) e a resposta é o que vamos responder ao navegador como no exemplo vamos responder com uma pagina html que vamos criar. Dentro dessa função precisamos primeiramente responder ao navegador que recebemos a requisição para isso:

resposta.writeHead(200);

o numero 200 é um código de status do http, que responde ao navegador que recebemos a requisição (você pode ver mais códigos aqui: http://httpstatus.es/) Feito isso precisamos responder ao navegador algum texto, html etc, no caso vamos responder um html, e para responder vamos usar o .end e passando junto o html para isso:

resposta.end(fs.readFileSync("view/index.html"));

Então definimos o .end na resposta e dentro dela usamos o modulo FS para carregar nosso html (não vou dar muito foco ao modulo FS, mas caso vocês queiram aprender mais sobre ele recomendo essa postagem: Node.js para leigos - Utilizando API File System). Com isso nossa função Servidor esta pronta, agora precisamos definir a porta e iniciar o servidor http, para isso existe o .listen, vejamos como usar:

http.listen(4000, function(){
  console.log("Servidor Online");
});

Definimos dentro de listen a porta 4000 e uma função para exibir no console a mensagem: “Servidor Online”

O app.js deverá ficar assim:

var http = require('http').createServer(servidor);
var fs = require('fs');

function servidor(requisicao, resposta){
    resposta.writeHead(200);
    resposta.end(fs.readFileSync('view/index.html'));
};

http.listen(4000, function(){
  console.log("Servidor On-line");
});

Feito isso nosso app.js está pronto, vamos agora criar uma pasta com o nome de view dentro do diretório do nosso projeto para guardar nosso html e ficar mais organizado, criada a pasta crie o arquivo index.html, nele vamos escrever a estrutura básica de todo html:

<html>
  <head>
    <title>Ola Mundo</title>
  </head>
  <body>
    <h1>Ola Mundo :)</h1>
  </body>
</html>

Aonde apenas defini o Titulo da pagina (title) e criei um h1 para mostrar a mensagem: Ola Mundo :) criado o arquivo abra o seu terminal ou prompt de comando e execute o arquivo app.js:

node app.js

Espere a mensagem “Servidor Online” aparecer, em seguida abra seu navegador e digite: http://localhost:4000/ deverá aparecer o html com a mensagem “Ola Mundo :)”

Isso acima é o básico para se criar um servidor http, para criar Rotas que é algo que será útil para a gente futuramente também é simples veja:

Dentro da função servidor vamos criar uma variável url que vai guardar em que url o navegador está requisitando:

var url = requisicao.url;

Agora precisamos criar IFs para determinar as rotas e oque o node.js deve fazer para cada uma, então:

var url = requisicao.url;

if(url == '/'){
  resposta.writeHead(200);
  resposta.end(fs.readFileSync('view/index.html'));
}else if(url == '/contatos'){
  resposta.writeHead(200);
  resposta.end("<h1>Pagina Contatos</h1>");
}else{
	resposta.writeHead(200);
  resposta.end("<h1>Error 404, Nada encontrado</h1>");
}

Então fizemos assim:

  • Se o usuário acessar “/” ou seja a index do nosso servidor mandamos o “index.html”
  • Se ele acessar “/contatos” vai ser enviado apenas um h1 informando “Pagina Contatos” (mas pode ser enviado um html da mesma forma que fizemos na index! )
  • Caso ele acesse alguma url não definida é mostrado um h1 informando: Error 404, Nada encontrado”

Fica assim o app.js:

var http = require('http').createServer(servidor);
var fs = require('fs');

function servidor(requisicao, resposta){
  var url = requisicao.url;
  if(url == '/'){
    resposta.writeHead(200);
    resposta.end(fs.readFileSync('view/index.html'));
  }else if(url == '/contatos'){
      resposta.writeHead(200);
      resposta.end("<h1>Pagina Contatos</h1>");
  }else{
    resposta.writeHead(200);
    resposta.end("<h1>Error: 404, nada encontrado</h1>");
  }
};

http.listen(3000, function(){
  console.log("Servidor On-line");
});

Agora para vermos essa maravilha funcionando abra seu terminal ou prompt de comando e:

node app.js

Abra seu navegador e acesse: http://localhost:4000/ e vai testando as rotas. Por enquanto é só isso, você pode criar quantas rotas quiser, mas futuramente vou mostrar um modulo que faz o gerenciamento das rotas de forma mais simples e organizada, vejo vocês na próxima.

Criando banco de dados com neDB

Hoje apresento a vocês o neDB, um banco de dados que não precisa de instalação, e que trabalha no formato Json e extremamente simples! Continue Lendo

Exibindo sensores com Socket.io e Arduíno

Published on March 10, 2015

Primeiros passos com Socket.io

Published on March 02, 2015