Node.js - Módulo web
¿Qué es un servidor Web?
Un servidor web es una aplicación de software que maneja las solicitudes HTTP enviadas por el cliente HTTP, como los navegadores web, y devuelve páginas web en respuesta a los clientes. Los servidores web suelen entregar documentos html junto con imágenes, hojas de estilo y scripts.
La mayoría de los servidores web admiten scripts del lado del servidor, utilizando lenguajes de scripting o redirigiendo la tarea a un servidor de aplicaciones que recupera datos de una base de datos y realiza una lógica compleja y luego envía un resultado al cliente HTTP a través del servidor web.
El servidor web Apache es uno de los servidores web más utilizados. Es un proyecto de código abierto.
Arquitectura de aplicaciones web
Una aplicación web generalmente se divide en cuatro capas:
Client - Esta capa consta de navegadores web, navegadores móviles o aplicaciones que pueden realizar solicitudes HTTP al servidor web.
Server - Esta capa tiene el servidor web que puede interceptar las solicitudes realizadas por los clientes y pasarles la respuesta.
Business- Esta capa contiene el servidor de aplicaciones que utiliza el servidor web para realizar el procesamiento requerido. Esta capa interactúa con la capa de datos a través de la base de datos o algunos programas externos.
Data - Esta capa contiene las bases de datos o cualquier otra fuente de datos.
Creando un servidor web usando Node
Node.js proporciona una httpmódulo que se puede utilizar para crear un cliente HTTP de un servidor. A continuación se muestra la estructura mínima del servidor HTTP que escucha en el puerto 8081.
Cree un archivo js llamado 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 continuación, creemos el siguiente archivo html llamado index.htm en el mismo directorio donde creó server.js.
File: index.htm
<html>
<head>
<title>Sample Page</title>
</head>
<body>
Hello World!
</body>
</html>
Ahora ejecutemos server.js para ver el resultado:
$ node server.js
Verifique la salida.
Server running at http://127.0.0.1:8081/
Realizar una solicitud al servidor Node.js
Abra http://127.0.0.1:8081/index.htm en cualquier navegador para ver el siguiente resultado.
Verifique la salida en el servidor.
Server running at http://127.0.0.1:8081/
Request for /index.htm received.
Creando un cliente web usando Node
Se puede crear un cliente web usando httpmódulo. Veamos el siguiente ejemplo.
Cree un archivo js llamado 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();
Ahora ejecute client.js desde una terminal de comando diferente que no sea server.js para ver el resultado:
$ node client.js
Verifique la salida.
<html>
<head>
<title>Sample Page</title>
</head>
<body>
Hello World!
</body>
</html>
Verifique la salida en el servidor.
Server running at http://127.0.0.1:8081/
Request for /index.htm received.