Introducción a Node.js para principiantes

Peticiones y respuestas

Para poder manejar peticiones y respuestas, el método createServer permite definir una función callback que nos provee de dos objetos, uno llamado request (petición) y otro response (respuesta):

const server = http.createServer(function(request, response){
	console.log(`Petición a la URL -> ${request.url}`);
});

server.listen(3000);

Fijaros qué ocurre si hacemos ahora diferentes peticiones con curl:

curl 127.0.0.1:3000
curl 127.0.0.1:3000/blog

El registro del servidor nos muestra esas peticiones:

Servidor HTTP iniciado
Escuchando el puerto 3000
Petición a la URL /
Petición a la URL /blog

¿Véis por donde van los tiros?

El problema es que estas conexiones siguen en marcha, por eso curl sigue funcionando hasta que finaliza automáticamente al cabo de un rato. Para cerrar la respuesta debemos llamar a su método end:

const server = http.createServer(function(request, response){
	console.log(`Petición a la URL -> ${request.url}`);
	request.end();
});

server.listen(3000);

En este punto sólo nos falta hacer una cosa, identificar las diferentes URL que el cliente necesita y responderle un contenido diferente en cada caso.

Usando el condicional if podemos hacerlo de forma bastante rudimentaria:

const server = http.createServer(function(request, response){
	console.log(`Petición a la URL -> ${request.url}`);
	if (request.url === "/") {
		response.write("Bienvenido a Hektor Profe");
	}
	if (request.url === "/blog") {
		response.write("Este es el blog de Hektor Profe");
	} 
	response.end();
});

Si volvemos a hacer las peticiones, esta vez nos devolverá los contenidos que nosotros estamos escribiendo en las respuestas:

curl 127.0.0.1:3000
curl 127.0.0.1:3000/blog

Si hacemos estas peticiones a través del navegador también funcionarán:

http://127.0.0.1:3000
http://127.0.0.1:3000/blog

Y si en lugar de enviar texto plano enviamos etiquetas HTML tendremos hecha toda la magia:

const server = http.createServer(function (request, response) {
    console.log(`Petición a la URL -> ${request.url}`);
    if (request.url === "/") {
        response.write(`
            <h1>Hektor Profe</h1>
            <h3>Portada</h3>
            <p>Esto es un texto de mi portada...<p>
            <a href="/blog">Blog</a>
        `);
        response.end();
    }
    if (request.url === "/blog") {
        response.write(`
            <h1>Hektor Profe</h1>
            <h3>Blog</h3>
            <p>Esto es una noticia de mi blog...<p>
            <a href="/">Portada</a>
        `);
        response.end();
    }
});

¿Qué os parece? Evidentemente no es la mejor forma de programar un web backend, pero hemos conseguido un prototipo funcional de una web en muy poco tiempo.