Saltar al contenido principal

Servidor HTTP

En Node.js, se puede crear un servidor HTTP de forma sencilla utilizando el módulo nativo http, lo que permite manejar solicitudes y enviar respuestas directamente desde JavaScript.

Al crear un servidor HTTP en Node.js, se recomienda:

  • Manejar siempre correctamente los códigos de estado HTTP (200, 404, 500, etc.) para que los clientes reciban información precisa sobre la respuesta.
  • No bloquear el event loop con operaciones largas dentro del manejador de peticiones; usar asincronía cuando sea necesario.
  • Gestionar rutas y métodos de manera clara y organizada, evitando mezclar demasiada lógica en un mismo bloque.
  • Cerrar correctamente la respuesta con response.end() para que la conexión se complete.

Crear un servidor HTTP básico

Para crear un servidor, se utiliza el método createServer del módulo http. Este método recibe como argumento una función que se ejecuta cada vez que llega una petición, proporcionando dos objetos: request (información de la petición) y response (para enviar la respuesta).

Ejemplo básico:

import http from 'http';

const servidor = http.createServer((request, response) => {
console.log(`Petición recibida: ${request.method} ${request.url}`);
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.end('Hola, este es mi servidor HTTP en Node.js');
});

const PORT = 3000;
servidor.listen(PORT, () => {
console.log(`Servidor escuchando en http://localhost:${PORT}`);
});

En este ejemplo, el servidor escucha en el puerto 3000. Cuando un cliente realiza una petición, se muestra un mensaje en la consola y se devuelve un texto como respuesta.

Manejo de diferentes rutas

Es posible comprobar la URL de la petición y responder de manera distinta según la ruta o el método HTTP (GET, POST, etc.):

const servidor = http.createServer((request, response) => {
if (request.url === '/' && request.method === 'GET') {
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.end('Página principal');
} else if (request.url === '/saludo' && request.method === 'GET') {
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.end('¡Hola desde /saludo!');
} else {
response.writeHead(404, { 'Content-Type': 'text/plain' });
response.end('Página no encontrada');
}
});