Aprende a crear un servidor HTTP básico usando el módulo http de Node.js

Creación de tu primer servidor HTTP básico autoimplementado (con enrutamiento) en Node.js

Un servidor web es un sistema que procesa solicitudes a través de HTTP, el protocolo de red básico que se utiliza para distribuir información en la web o localmente. Puede usar el módulo http de Node.js para solicitar cosas de la web o incluso crear su propio servidor http para responder a las respuestas de quién, entregar archivos, etc.

En este artículo, aprenderá cómo implementar un servidor http autoescrito utilizando el módulo http y el módulo httpdispatcher para agregar funcionalidad de enrutamiento. 

Implementación

Para comenzar, cree un archivo JS con el nombre server.js, contendrá el siguiente código para crear y manejar un servidor http básico:

Nota:  el módulo http ya está integrado en node.js, por lo que no es necesario descargar ningún módulo. A menos que todavía no.

// requerir el módulo http de node.js
var http = require('http');

// defina el puerto de acceso para su servidor
const PORT = 8080;

// Necesitamos una función que maneje solicitudes y envíe respuestas.
function handleRequest(request, response){
    response.end('El servidor funciona correctamente. URL solicitada : ' + request.url);
}

// Crea un servidor
var myFirstServer = http.createServer(handleRequest);

// ¡Inicie el servidor!
myFirstServer.listen(PORT, function(){
    // La devolución de llamada se activa cuando el servidor está escuchando correctamente. ¡Viva!
    console.log("Server listening on: http://localhost:%s", PORT);
});

El método createServer devuelve una nueva instancia de http.Server. Para crear nuestro servidor, debe especificar un puerto y usar el método de escucha, esto hace que el servidor acepte conexiones en el identificador especificado.

Para iniciar el servidor, utilice el siguiente comando en el símbolo del sistema de Node.js:

node server.js

Ahora abra su navegador favorito y navegue hasta http: // localhost: 8080 , debería obtener la siguiente respuesta (y debería cambiar de acuerdo con la URL dada):

HTTP server Node.js

Como puede ver, el servidor responde a todas las direcciones URL.

Tenga en cuenta que el módulo http es muy simple, crear una aplicación web compleja utilizando el ejemplo anterior consumiría mucho tiempo para una implementación adecuada, por lo que debe usar el ejemplo anterior para cosas simples como archivos de servicio o con fines de aprendizaje. Si está trabajando con proyectos complejos, debe usar un marco para ello, es decir  , Express ,  hapi ,  koa  o  restify . En este artículo, aprenderá a crear un sistema de enrutamiento básico utilizando el  módulo httpdispatcher .

Añadiendo funcionalidad de enrutamiento

Como se mencionó anteriormente, su servidor por ahora devuelve una respuesta para cualquier URL, por lo tanto, para agregar algunas características de la "vida real", su servidor debe responder a direcciones URL específicas.

Para manejar esto en este ejemplo básico, necesitamos usar un despachador, funcionará como una especie de enrutador que le permitirá responder de manera diferente a URL particulares. httpdispatcher  es una clase simple que permite al desarrollador tener un despachador claro para páginas dinámicas y recursos estáticos.

Para agregar el despachador http a su proyecto, agregue el módulo ejecutando el siguiente comando en el símbolo del sistema de Node.js:

npm install httpdispatcher

Ahora, agreguemos algunas rutas usando el despachador en el ejemplo:

// requieren el módulo http de node.js
var http = require('http');
// requieren el módulo de despachador
var dispatcher = require('httpdispatcher');

// defina el puerto de acceso para su servidor
const PORT = 8080;

// Necesitamos una función que maneje solicitudes y envíe respuestas.
function handleRequest(request, response){
    try {
        // registrar la solicitud en la consola
        console.log(request.url);
        // Enviar
        dispatcher.dispatch(request, response);
    } catch(err) {
        console.log(err);
    }
}

// Crea un servidor
var myFirstServer = http.createServer(handleRequest);

// agregar algunas rutas

// Una solicitud GET de muestra
dispatcher.onGet("/", function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('<h1>Oye, esta es la página de inicio de tu servidor.</h1>');
});

dispatcher.onGet("/welcome", function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Welcome homepage');
});

dispatcher.onError(function(req, res) {
    res.writeHead(404);
    res.end("Error, the URL doesn't exist");
});

// ¡Inicie el servidor!
myFirstServer.listen(PORT, function(){
    // La devolución de llamada se activa cuando el servidor está escuchando correctamente. ¡Viva!
    console.log("Server listening on: http://localhost:%s", PORT);
});

El módulo httpdispatcher le facilita la creación de rutas y respuestas para diferentes formatos de solicitud (POST, GET) y, como prometió, ahora tiene un servidor http funcional hecho con Node.js, para iniciar su ejecución:

node server.js

Si navega a http: // localhost: 8080 y http: // localhost: 8080 / welcome  verá respectivamente la respuesta dada en el ejemplo. Si intenta acceder a una URL que no existe, es decir, http: // localhost: 8080 / this-doesnt-  exist, obtendrá una respuesta 404 con "Error, la URL no existe".

Si desea funciones más potentes, puede leer nuestro tutorial de Cómo crear un servidor http con Express para proyectos de alta escalabilidad.

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores