Introducción a Node.js para principiantes

Módulo Http

Los módulos que hemos visto hasta ahora son utilidades, pero el último que vamos a ver es más especial porque está pensado para crear servicios web backend.

Este módulo es cosa fina y para entender bien como funciona os sugiero estudiar antes el protocolo Http en relación a la gestión de las peticiones, los mensajes, las cabeceras y sus respuestas. Os voy a dejar un enlace a la wikipedia donde se explica en detalle su funcionamiento.

Pero a lo que vamos, ¿qué es un servicio? Un servicio es un programa que está en marcha permentemente esperando para responder diferentes peticiones de clientes a través de la red informática, también se les llama servidores.

app_http.js

const http = require('http');

El módulo http incluye un método para crear un servidor http que escucha las peticiones que le llegan desde un puerto de la red del sistema y responde con contenido HTML a esas peticiones, es decir, responde con páginas web que el cliente puede visualizar.

Para crear nuestro servidor lo haremos así:

const server = http.createServer();

En este punto tenemos todo lo necesario en el objeto server, pero no lo tenemos escuchando todavía las peticiones, debemos indicarle que empiece a escuchar peticiones en algún puerto libre:

const server = http.createServer();
server.listen(3000);

console.log("Servidor HTTP iniciado");
console.log("Escuchando el puerto 3000")

Ya tenemos nuestro servidor web escuchando el puerto 3000, pero sólo escucha, todavía no procesa ninguna petición.

Vamos a hacer algo interesante, programar un evento. Los eventos son momentos que ocurren en los servicios y podemos detectarlos. Un momento importante es por ejemplo cuando se conecta un cliente al servidor.

Para definir un evento se utiliza el método on y el nombre del evento que queremos programar, en nuestro caso será connection.

Como en todas las tareas asíncronas, ésta llamará una función callback cuando se conecte un cliente, y en este caso le pasará un objeto de tipo socket que contiene información sobre la conexión activa entre el servidor y el cliente conectado:

const server = http.createServer();

server.on('connection', function(socket) {
	console.log("Nueva conexión en el puerto 3000");
	console.log(socket);
});

server.listen(3000);

Si ponemos en marcha el servidor y hacemos una petición al puerto 3000, veremos que nos muestra por pantalla que ha ocurrido el evento. Una forma rápida de hacerlo es desde el navegador, o también podemos usar la herramienta curl que tienen todos los sitemas operativos, dividiendo cómodamente la terminal en dos:

curl 127.0.0.1:3000

Sin embargo la gracia de un servicio web no es manejar los sockets, eso es algo que se hace en una capa inferior. El objetivo de los servicios web es manejar las peticiones a diferentes URL del servidor y responderles contenido HTML.

Veremos cómo hacerlo en la siguiente lección.