Crear un servidor web HTTP en Node.js con Code Ejemplo
⚡ Resumen inteligente
Node.js crea un servidor web funcional en pocas líneas utilizando el módulo http integrado. El servidor escucha en un puerto elegido y responde a cada solicitud con un código de estado y un cuerpo de la respuesta, mientras que un código independiente obtiene datos de otros sitios.

El Node.js El framework se utiliza principalmente para crear aplicaciones basadas en servidor. Se puede usar fácilmente para construir servidores web que distribuyan contenido a los usuarios.
Varios módulos manejan las solicitudes relacionadas con el servidor, el integrado http El módulo principal entre ellos. Veremos cómo crear una aplicación básica de servidor web usando Node.js, y luego cómo solicitar datos de otro sitio.
Nodo como servidor web usando HTTP
Veamos un ejemplo de cómo crear y ejecutar una primera aplicación Node.js.
La aplicación crea un módulo de servidor simple que escucha en el puerto 7000. Cuando se realiza una solicitud a través del navegador en ese puerto, el servidor envía un Hola Mundo respuesta al cliente.
Code Explicación
- El
requireLa función lee un JavaScript archivo, lo ejecuta y devuelve su objeto de exportaciones. Aquí carga elhttpmódulo para que su funcionalidad esté disponible en la aplicación. - Una aplicación de servidor se crea a partir de una función simple. Esa función se ejecuta cada vez que una solicitud llega al servidor.
- Cuando se recibe una solicitud, la respuesta se envía con un estado de 200Este es el código de estado estándar en un encabezado HTTP para una respuesta exitosa.
- El cuerpo de la respuesta en sí es la cadena Hola Mundo.
server.listenHace que la aplicación escuche las solicitudes de los clientes en el puerto 7000. Se puede utilizar cualquier puerto disponible.
Si el comando se ejecuta correctamente, aparecerá la siguiente salida en el navegador.
Resultado
Según la salida:
- Navegando al host local URL en el puerto 7000 se muestra la cadena Hola Mundo en la página.
- Dado que el código especifica el puerto 7000, la salida solo es visible al navegar a ese puerto.
Aquí está el código como referencia:
var http = require('http'); var server = http.createServer(function(request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); response.end("Hello World\n"); }); server.listen(7000);
Manejo de solicitudes GET en Node.js
Realizar una solicitud GET para recuperar datos de otro sitio es sencillo en Node.js. Históricamente, esto requería la request Módulo instalado desde la línea de comandos:
npm install request
Ese comando le pide al gestor de paquetes de Node que descargue el módulo necesario y lo instale. Cuando la instalación se realiza correctamente, la línea de comandos muestra el nombre y la versión del módulo instalado en el formato <name>@<version>.
En la instantánea de arriba, el request El módulo y su número de versión fueron descargados e instalados.
Code Explicación
- El
requestEl módulo instalado en el paso anterior proporciona las funciones necesarias para realizar solicitudes GET a sitios web. - Se realiza una solicitud GET a un sitio web y se ejecuta una función de devolución de llamada una vez que llega la respuesta. Esta función recibe tres parámetros:
- Error — registra cualquier error que se produzca al realizar la solicitud.
- Respuesta — contiene los encabezados HTTP devueltos con la respuesta.
- Carrocería — contiene todo el contenido de la respuesta.
- El contenido recibido en el
bodyEl parámetro se escribe en la consola.
Aquí está el código como referencia:
var request = require("request"); request("https://example.com", function(error, response, body) { // Always check the error parameter before using the body if (error) { console.error("Request failed:", error.message); return; } console.log(body); });
⚠️ Aviso de descontinuación: <font dir="auto" style="vertical-align: inherit;">las </font> request El módulo era Completamente obsoleto en febrero de 2020. y no recibe más actualizaciones. Todavía se instala y se ejecuta, por lo que el ejemplo anterior sigue siendo válido para los proyectos existentes, pero npm install request ahora imprime una advertencia de obsolescencia. El nuevo código debería usar el integrado fetch La función se muestra en la siguiente sección.
Cómo realizar solicitudes HTTP con la función fetch nativa en Node.js
Node ha incluido una función global fetch Funciona desde la versión 18, coincidiendo con la API que ya proporcionan los navegadores. No se requiere la instalación de ningún paquete y la función devuelve una promesa, por lo que funciona directamente con async/await.
// No require and no npm install needed on Node 18 or later async function getData() { try { const response = await fetch("https://example.com"); // fetch does NOT reject on 404 or 500 — check ok yourself if (!response.ok) { throw new Error("HTTP status " + response.status); } const body = await response.text(); console.log(body); } catch (err) { // Network failures and the throw above both land here console.error("Request failed:", err.message); } } getData();
Hay tres diferencias con respecto al estilo de devolución de llamada que vale la pena destacar. Primero, fetch Los rechazos se producen únicamente en caso de fallo a nivel de red; un error HTTP 404 o 500 se resuelve correctamente, por lo que el response.ok La verificación existe y por qué omitirla es el error más común al pasar de request. Segundo, el cuerpo no se entrega con la respuesta; debe leerse explícitamente con response.text() para texto sin formato o response.json() para JSON, y cada uno de ellos devuelve su propia promesa. En tercer lugar, debido a que toda la llamada se basa en promesas, una sola try/catch Cubre tanto la solicitud como el cuerpo leído, reemplazando por completo el parámetro de devolución de llamada de error-first.
Para los scripts que deben ejecutarse en Node 16 o anterior, instale node-fetch or axios En cambio, dado que ambos exponen una interfaz comparable basada en promesas y solo requieren un cambio en la línea de importación una vez que se actualiza el entorno de ejecución.
request vs fetch vs axios: ¿Cuál usar?
En la mayoría de los materiales de Node aparecen tres clientes HTTP, pero solo uno de ellos es una opción predeterminada recomendable para proyectos nuevos. Se diferencian en su estado de mantenimiento, en si requieren o no dependencias y en cómo indican los errores, por lo que la siguiente tabla los compara.
| Aspecto | solicita | obtener (integrado) | axios |
|---|---|---|---|
| Estado | Obsoleto desde 2020 | Mantenido en el núcleo | Mantenido activamente |
| Instalación | paquete npm | Ninguno en Node 18+ | paquete npm |
| DE ESTILO RESORT | devolución de llamada de error primero | Promesa | Promesa |
| análisis JSON | Manual o una opción JSON | Manual a través de response.json() | Automático |
| Rechazos en 404 o 500 | No | No | Sí: |
Usar fetch Para nuevos proyectos en una versión actual de Node, ya que no agrega ninguna dependencia y coincide con la API del navegador que los desarrolladores ya conocen. Elija axios cuando el manejo automático de JSON, los interceptores de solicitudes o el rechazo en estados de error ahorrarían código real. Mantener request solo dentro de aplicaciones heredadas que ya dependen de él y planean reemplazarlo.
Errores comunes del servidor Node.js y cómo solucionarlos
La mayoría de los fallos al iniciar un servidor Node por primera vez se deben a problemas con los puertos, las rutas o la falta de respuesta, y no al código del servidor en sí.
- EADDRINUSE: Otro proceso ya tiene el puerto ocupado. Ejecutar
netstat -ano | findstr :7000on Windows, olsof -i :7000on macOS y Linux, entonces detenga ese proceso o elija un puerto diferente. - EACCES en un puerto bajo: Los puertos inferiores a 1024 requieren privilegios elevados. Durante el desarrollo, utilice un puerto superior a 1024, como el 3000 o el 7000.
- El navegador se bloquea y nunca carga: El encargado nunca llamó
response.end()La conexión permanece abierta hasta que expira el tiempo de espera, por lo que cada ruta a través del controlador debe finalizar la respuesta. - No se puede encontrar el módulo 'http': El nombre del archivo está mal escrito o el script se está ejecutando en un navegador en lugar de en Node. Los módulos principales no necesitan instalación.
- Los cambios no aparecen: Node carga el archivo una vez al inicio. Reinicie el proceso después de cada edición o ejecútelo bajo un observador como
node --watch server.js.




