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.




