Node.js - Módulo da Web

O que é um servidor web?

Um servidor web é um aplicativo de software que lida com solicitações HTTP enviadas pelo cliente HTTP, como navegadores da web, e retorna páginas da web em resposta aos clientes. Os servidores da Web geralmente fornecem documentos html junto com imagens, folhas de estilo e scripts.

A maioria dos servidores web oferece suporte a scripts do lado do servidor, usando linguagens de script ou redirecionando a tarefa para um servidor de aplicativos que recupera dados de um banco de dados e executa lógica complexa e, em seguida, envia um resultado para o cliente HTTP por meio do servidor web.

O servidor da web Apache é um dos servidores da web mais comumente usados. É um projeto de código aberto.

Arquitetura de aplicativo da Web

Um aplicativo da Web geralmente é dividido em quatro camadas -

  • Client - Esta camada consiste em navegadores da web, navegadores móveis ou aplicativos que podem fazer solicitações HTTP para o servidor da web.

  • Server - Esta camada possui o servidor Web que pode interceptar as solicitações feitas pelos clientes e passar a resposta.

  • Business- Essa camada contém o servidor de aplicativos que é utilizado pelo servidor da web para fazer o processamento necessário. Essa camada interage com a camada de dados por meio do banco de dados ou de alguns programas externos.

  • Data - Esta camada contém os bancos de dados ou qualquer outra fonte de dados.

Criando um servidor web usando o Node

Node.js fornece um httpmódulo que pode ser usado para criar um cliente HTTP de um servidor. A seguir está a estrutura mínima do servidor HTTP que escuta na porta 8081.

Crie um arquivo js chamado server.js -

File: server.js

var http = require('http');
var fs = require('fs');
var url = require('url');

// Create a server
http.createServer( function (request, response) {  
   // Parse the request containing file name
   var pathname = url.parse(request.url).pathname;
   
   // Print the name of the file for which request is made.
   console.log("Request for " + pathname + " received.");
   
   // Read the requested file content from file system
   fs.readFile(pathname.substr(1), function (err, data) {
      if (err) {
         console.log(err);
         
         // HTTP Status: 404 : NOT FOUND
         // Content Type: text/plain
         response.writeHead(404, {'Content-Type': 'text/html'});
      } else {	
         //Page found	  
         // HTTP Status: 200 : OK
         // Content Type: text/plain
         response.writeHead(200, {'Content-Type': 'text/html'});	
         
         // Write the content of the file to response body
         response.write(data.toString());		
      }
      
      // Send the response body 
      response.end();
   });   
}).listen(8081);

// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

A seguir, vamos criar o seguinte arquivo html denominado index.htm no mesmo diretório onde você criou server.js.

File: index.htm

<html>
   <head>
      <title>Sample Page</title>
   </head>
   
   <body>
      Hello World!
   </body>
</html>

Agora vamos executar o server.js para ver o resultado -

$ node server.js

Verifique a saída.

Server running at http://127.0.0.1:8081/

Faça uma solicitação ao servidor Node.js

Abra http://127.0.0.1:8081/index.htm em qualquer navegador para ver o seguinte resultado.

Verifique a saída no final do servidor.

Server running at http://127.0.0.1:8081/
Request for /index.htm received.

Criação de cliente Web usando Node

Um cliente da web pode ser criado usando httpmódulo. Vamos verificar o seguinte exemplo.

Crie um arquivo js chamado client.js -

File: client.js

var http = require('http');

// Options to be used by request 
var options = {
   host: 'localhost',
   port: '8081',
   path: '/index.htm'  
};

// Callback function is used to deal with response
var callback = function(response) {
   // Continuously update stream with data
   var body = '';
   response.on('data', function(data) {
      body += data;
   });
   
   response.on('end', function() {
      // Data received completely.
      console.log(body);
   });
}
// Make a request to the server
var req = http.request(options, callback);
req.end();

Agora execute o client.js em um terminal de comando diferente do server.js para ver o resultado -

$ node client.js

Verifique a saída.

<html>
   <head>
      <title>Sample Page</title>
   </head>
   
   <body>
      Hello World!
   </body>
</html>

Verifique a saída no final do servidor.

Server running at http://127.0.0.1:8081/
Request for /index.htm received.