{"id":47763,"date":"2026-08-09T18:36:26","date_gmt":"2026-08-09T16:36:26","guid":{"rendered":"\/co\/tutoriales\/aprender-node-js-tutorial\/"},"modified":"2026-08-09T18:36:26","modified_gmt":"2026-08-09T16:36:26","slug":"aprender-node-js-tutorial","status":"publish","type":"post","link":"\/co\/tutoriales\/aprender-node-js-tutorial\/","title":{"rendered":"Tutorial de Node.js: c\u00f3mo empezar a utilizar Node.js tras la instalaci\u00f3n"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Node.js lleva JavaScript al servidor, lo que te permite ejecutar scripts, gestionar solicitudes y crear la l&oacute;gica del backend desde el terminal.<\/p><p class=\"wp-block-paragraph\">Una vez que hayas instalado Node.js en el entorno que prefieras, ya sea tu ordenador, un servidor privado virtual (VPS) o un servicio de hosting administrado, podr&aacute;s empezar a ejecutar scripts, crear servidores y gestionar paquetes de inmediato.<\/p><p class=\"wp-block-paragraph\">Esto es lo que har&aacute;s despu&eacute;s de instalar Node.js:<\/p><ol class=\"wp-block-list\">\n<li>Escribe y ejecuta tu primer script de Node.js.<\/li>\n\n\n\n<li>Lee archivos utilizando m&oacute;dulos integrados como <strong>fs<\/strong>.<\/li>\n\n\n\n<li>Crea un servidor HTTP b&aacute;sico desde cero.<\/li>\n\n\n\n<li>Instala y utiliza paquetes de terceros con <strong>npm<\/strong>.<\/li>\n\n\n\n<li>Comprende c&oacute;mo gestiona Node.js el c&oacute;digo as&iacute;ncrono.<\/li>\n\n\n\n<li>Elige qu&eacute; quieres crear a continuaci&oacute;n, como una API REST o una app full-stack.<\/li>\n<\/ol><h2 class=\"wp-block-heading\" id=\"h-que-es-node-js\">&iquest;Qu&eacute; es Node.js?<\/h2><p class=\"wp-block-paragraph\">Node.js es un entorno de ejecuci&oacute;n de JavaScript gratuito, de c&oacute;digo abierto y multiplataforma que permite ejecutar JavaScript fuera de un navegador web. Utiliza el motor V8 de Google para compilar el c&oacute;digo directamente en c&oacute;digo m&aacute;quina.<\/p><p class=\"wp-block-paragraph\">Antes del lanzamiento de <a href=\"\/co\/tutoriales\/que-es-node-js\/\">Node.js<\/a> en 2009, JavaScript se limitaba al navegador y se encargaba de tareas como los clics en botones y las actualizaciones de las p&aacute;ginas.<\/p><p class=\"wp-block-paragraph\">Node.js cambi&oacute; esta situaci&oacute;n al llevar JavaScript al servidor, donde puede leer archivos, conectarse a bases de datos y gestionar la l&oacute;gica del backend.<\/p><p class=\"wp-block-paragraph\">Hoy en d&iacute;a, Node.js se utiliza para crear API REST, apps en tiempo real, herramientas de l&iacute;nea de comandos y servicios de red escalables. Su arquitectura permite gestionar de forma eficiente numerosas conexiones simult&aacute;neas sin crear un hilo independiente para cada una.<\/p><h2 class=\"wp-block-heading\" id=\"h-como-ejecutar-aplicaciones-de-node-js\">C&oacute;mo ejecutar aplicaciones de Node.js<\/h2><p class=\"wp-block-paragraph\">Puedes ejecutar Node.js en tres entornos principales: de forma local en tu ordenador, en un servidor remoto como un VPS o mediante una plataforma de hosting administrado. Cada opci&oacute;n se adapta a una fase diferente del desarrollo y el despliegue.<\/p><h3 class=\"wp-block-heading\">C&oacute;mo ejecutar Node.js localmente para el desarrollo<\/h3><p class=\"wp-block-paragraph\">Ejecutar Node.js de forma local es la opci&oacute;n m&aacute;s habitual para desarrollar y hacer pruebas. Puedes empezar en unos minutos:<\/p><ol class=\"wp-block-list\">\n<li>Descarga la versi&oacute;n con soporte a largo plazo (LTS) desde el <a href=\"https:\/\/nodejs.org\/en\/download\" target=\"_blank\" rel=\"noopener\">sitio web oficial de Node.js<\/a><\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5d245e\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5d245e\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058512907-0.png\/public\" alt=\"The Node.js download page showing a supported installer for macOS\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"2\" class=\"wp-block-list\">\n<li>Inst&aacute;lala con el paquete correspondiente a tu sistema operativo.<\/li>\n\n\n\n<li>Abre el terminal y ejecuta <strong>node -v<\/strong> para comprobar la instalaci&oacute;n. Si aparece un n&uacute;mero de versi&oacute;n, Node.js est&aacute; listo para usar.<\/li>\n<\/ol><h3 class=\"wp-block-heading\">C&oacute;mo ejecutar Node.js en Ubuntu<\/h3><p class=\"wp-block-paragraph\">Un VPS te ofrece un entorno de servidor remoto en el que puedes desplegar y ejecutar apps de Node.js en producci&oacute;n. Puedes conectarte mediante SSH desde el terminal de tu ordenador.<\/p><p class=\"wp-block-paragraph\">Este es el proceso general para <a href=\"\/co\/tutoriales\/instalar-node-js-ubuntu\/\">instalar Node.js en Ubuntu<\/a>:<\/p><ol class=\"wp-block-list\">\n<li>Con&eacute;ctate a tu VPS a trav&eacute;s de SSH.<\/li>\n\n\n\n<li>Instala Node.js mediante un gestor de paquetes o un gestor de versiones como NVM.<\/li>\n\n\n\n<li>Ejecuta la app con el comando <strong>node<\/strong>.<\/li>\n<\/ol><h3 class=\"wp-block-heading\">C&oacute;mo ejecutar Node.js con hosting administrado<\/h3><p class=\"wp-block-paragraph\">El hosting administrado te evita tener que configurar el servidor de Node.js. El proveedor de hosting se encarga del entorno de ejecuci&oacute;n, las dependencias y el proceso de despliegue.<\/p><p class=\"wp-block-paragraph\">Por ejemplo, el <a href=\"\/co\/hosting-apps-web\">hosting administrado para Node.js de Hostinger<\/a> se encarga de las compilaciones de npm, las variables de entorno y la supervisi&oacute;n autom&aacute;tica de vulnerabilidades.<\/p><p class=\"wp-block-paragraph\">Adem&aacute;s, es compatible con otros marcos de JavaScript, como React, Vue.js, Angular, Next.js, Express.js y NestJS, por lo que puedes configurarlo una sola vez y ejecutar todo desde un mismo lugar.<\/p><p class=\"wp-block-paragraph\">Para desplegar un sitio web de Node.js en Hostinger, sigue estos pasos:<\/p><ol class=\"wp-block-list\">\n<li>Contrata un plan de hosting <strong>Business<\/strong> o <strong>Cloud Startup<\/strong>.<\/li>\n\n\n\n<li>Ve a <strong>Sitios web<\/strong> &rarr; <strong>A&ntilde;adir sitio web<\/strong> &rarr; <strong>Aplicaci&oacute;n web de Node.js<\/strong> en hPanel.<\/li>\n\n\n\n<li>Conecta un repositorio de GitHub o sube un archivo comprimido del proyecto.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5d2ea8\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5d2ea8\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058512913-1.png\/public\" alt=\"Hostinger's hPanel showing options to deploy a Node.js web app: Import Git repository or upload the compressed files\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"4\" class=\"wp-block-list\">\n<li>Confirma la configuraci&oacute;n de compilaci&oacute;n detectada autom&aacute;ticamente para tu marco.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5d3571\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5d3571\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058515919-2.png\/public\" alt=\"Hostinger's hPanel showing the auto-detected build settings for the Node.js web app\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"5\" class=\"wp-block-list\">\n<li>Haz clic en <strong>Implementar<\/strong> para compilar y desplegar tu app de Node.js.<\/li>\n<\/ol><figure class=\"wp-block-image size-full\"><a class=\"hgr-tutorials-cta hgr-tutorials-cta-web-hosting\" href=\"\/co\/web-apps-hosting\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2023\/11\/Web-hosting_in-text-banner.png\/public\" alt=\"Hostinger web hosting banner\" class=\"wp-image-98604\"><\/a><\/figure><h2 class=\"wp-block-heading\" id=\"h-como-crear-tu-primer-script-de-node-js\">C&oacute;mo crear tu primer script de Node.js<\/h2><p class=\"wp-block-paragraph\">Escribir un script es el primer paso pr&aacute;ctico que debes dar tras instalar Node.js. Puedes empezar con un solo archivo y una l&iacute;nea de c&oacute;digo, y ya tendr&aacute;s un script que funciona.<\/p><ol class=\"wp-block-list\">\n<li>Abre el terminal en tu ordenador y crea un nuevo archivo con el <a href=\"\/co\/tutoriales\/instalar-nano-text-editor\/\">editor de texto nano<\/a>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nano hello.js<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Escribe la siguiente l&iacute;nea en el editor:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">console.log('Hello, World!');<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li>Guarda el archivo y sal de <strong>nano<\/strong> pulsando <strong>Ctrl<\/strong> + <strong>X<\/strong> &rarr; <strong>Ctrl<\/strong> + <strong>Y<\/strong> &rarr; <strong>Intro<\/strong>.<\/li>\n\n\n\n<li>Ejecuta el script:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">node hello.js<\/pre><p class=\"wp-block-paragraph\">El terminal deber&iacute;a mostrar:<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5d73f9\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5d73f9\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058518925-3.png\/public\" alt=\"The terminal showing the node hello.js command's output: \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\"><strong>console.log()<\/strong> muestra texto en el terminal. Probablemente ya lo hayas utilizado en las herramientas de desarrollo del navegador, pero aqu&iacute; se ejecuta directamente en tu ordenador en lugar de dentro de un navegador.<\/p><p class=\"wp-block-paragraph\">Si trabajas desde tu ordenador y prefieres utilizar un editor de c&oacute;digo con interfaz gr&aacute;fica como VS Code o Sublime Text, crea <strong>hello.js<\/strong> directamente en el editor.<\/p><p class=\"wp-block-paragraph\">Guarda el archivo, abre el terminal, accede a la carpeta donde se encuentra con <strong>cd path\/to\/folder<\/strong> y ejecuta el mismo comando: <strong>node hello.js<\/strong>.<\/p><h2 class=\"wp-block-heading\" id=\"h-como-utilizar-los-modulos-de-node-js\">C&oacute;mo utilizar los m&oacute;dulos de Node.js<\/h2><p class=\"wp-block-paragraph\">En Node.js, los m&oacute;dulos te permiten dividir el c&oacute;digo en componentes reutilizables. Node.js incluye decenas de m&oacute;dulos integrados, como <strong>fs<\/strong> para trabajar con el sistema de archivos, <strong>http<\/strong> para crear servidores y <strong>path<\/strong> para trabajar con rutas de archivos.<\/p><p class=\"wp-block-paragraph\">Para ver uno de estos m&oacute;dulos en acci&oacute;n, utiliza <strong>fs<\/strong>. Primero, crea un archivo llamado <strong>sample.txt<\/strong> y a&ntilde;ade alg&uacute;n contenido:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Este es un archivo de texto de ejemplo.<\/pre><p class=\"wp-block-paragraph\">A continuaci&oacute;n, crea <strong>read-file.js<\/strong> en la misma carpeta:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const fs = require('fs');\n\nconst content = fs.readFileSync('sample.txt', 'utf8');\nconsole.log(content);<\/pre><p class=\"wp-block-paragraph\">La primera l&iacute;nea importa el m&oacute;dulo integrado <strong>fs<\/strong> mediante <strong>require()<\/strong>. A continuaci&oacute;n, <strong>readFileSync()<\/strong> lee el archivo y devuelve su contenido como una cadena de texto.<\/p><p class=\"wp-block-paragraph\">El argumento <strong>utf8<\/strong> especifica c&oacute;mo debe leer Node.js el archivo. Sin &eacute;l, Node.js devolver&iacute;a el contenido como bytes sin procesar en lugar de texto legible.<\/p><p class=\"wp-block-paragraph\">Una vez hecho esto, ejecuta el siguiente comando en el terminal:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">node read-file.js<\/pre><p class=\"wp-block-paragraph\">El terminal muestra todo lo que hayas a&ntilde;adido a <strong>sample.txt<\/strong>.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5d7ef9\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5d7ef9\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058521932-4.png\/public\" alt=\"The terminal showing the node read-file.js command's output: \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-como-crear-un-servidor-basico-con-node-js\">C&oacute;mo crear un servidor b&aacute;sico con Node.js<\/h2><p class=\"wp-block-paragraph\">Crear un servidor HTTP con Node.js es uno de los primeros pasos para adentrarte en el desarrollo backend. Para hacerlo, incluye el m&oacute;dulo integrado <strong>http<\/strong> en el archivo.<\/p><ol class=\"wp-block-list\">\n<li><strong>Crea el archivo del servidor<\/strong>. Crea un archivo llamado <strong>server.js<\/strong> y a&ntilde;ade lo siguiente:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const http = require('http');\n\nconst hostname = '127.0.0.1';\nconst port = 3000;\n\nconst server = http.createServer((req, res) =&gt; {\n   res.statusCode = 200;\n   res.setHeader('Content-Type', 'text\/plain');\n   res.end('Hello from Node.js server!n');\n});\n\nserver.listen(port, hostname, () =&gt; {\n   console.log(`Server running at http:\/\/${hostname}:${port}\/`);\n});<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Inicia el servidor ejecutando este comando:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">node server.js<\/pre><p class=\"wp-block-paragraph\">Deber&iacute;as ver &ldquo;<strong>Server running at http:\/\/127.0.0.1:3000\/<\/strong>&ldquo;.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>&Aacute;brelo en un navegador<\/strong>. Visita <strong>http:\/\/127.0.0.1:3000\/<\/strong> y ver&aacute;s &ldquo;Hello from Node.js server!&rdquo; en la p&aacute;gina.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5d8914\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5d8914\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058524936-5.png\/public\" alt=\"The browser showing the \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">El servidor seguir&aacute; funcionando hasta que lo detengas con <strong>Ctrl+C<\/strong> en el terminal.<\/p><p class=\"wp-block-paragraph\">Esto es lo que hace cada parte de <strong>server.js<\/strong>:<\/p><ul class=\"wp-block-list\">\n<li>El nombre de host <strong>127.0.0.1<\/strong> significa que el servidor solo acepta conexiones desde tu ordenador.<\/li>\n\n\n\n<li><strong>http.createServer()<\/strong> crea el servidor. El callback se ejecuta cada vez que un cliente env&iacute;a una solicitud.<\/li>\n\n\n\n<li><strong>res.statusCode = 200<\/strong> establece el c&oacute;digo de estado HTTP en 200 (OK), lo que indica que la solicitud se ha realizado correctamente.<\/li>\n\n\n\n<li><strong>res.setHeader(&lsquo;Content-Type&rsquo;, &lsquo;text\/plain&rsquo;)<\/strong> indica al navegador que la respuesta es texto sin formato, no HTML.<\/li>\n\n\n\n<li><strong>res.end()<\/strong> env&iacute;a el cuerpo de la respuesta y cierra la conexi&oacute;n.<\/li>\n\n\n\n<li><strong>server.listen()<\/strong> inicia el servidor y lo asocia al puerto y al nombre de host especificados.<\/li>\n<\/ul><p class=\"wp-block-paragraph\">Si ejecutas el servidor en un VPS, cambia el nombre de host a <strong>0.0.0.0<\/strong>. Despu&eacute;s de guardar el archivo, abre el puerto en <a href=\"\/co\/tutoriales\/como-configurar-firewall-ubuntu\/\">Uncomplicated Firewall (UFW)<\/a>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo ufw allow 3000<\/pre><p class=\"wp-block-paragraph\">A continuaci&oacute;n, abre un navegador y ve a <strong>http:\/\/your-vps-ip:3000\/<\/strong>.<\/p><p class=\"wp-block-paragraph\">Los usuarios de VPS de Hostinger pueden consultar su direcci&oacute;n IP en hPanel accediendo a <strong>VPS &rarr; Gestionar &rarr; Resumen &rarr; Detalles del VPS<\/strong>.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"6a78e2a5ddfc1\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5ddfc1\" class=\"size-full wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/vps-ip-hpanel-es.png\/public\" alt=\"Informaci&oacute;n del sistema operativo en el men&uacute; de resumen del VPS en hPanel\" class=\"wp-image-55639\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><figure class=\"wp-block-image size-large\"><a href=\"\/co\/servidor-vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/40\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-29287\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/40\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/40\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/40\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/40\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/40\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1536,fit=scale-down 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><h2 class=\"wp-block-heading\" id=\"h-como-instalar-y-utilizar-paquetes-con-npm\">C&oacute;mo instalar y utilizar paquetes con npm<\/h2><p class=\"wp-block-paragraph\"><a href=\"\/co\/tutoriales\/que-es-npm\/\">Node Package Manager (npm)<\/a> viene incluido con Node.js y te permite acceder a m&aacute;s de dos millones de paquetes de c&oacute;digo abierto.<\/p><p class=\"wp-block-paragraph\">A diferencia de los m&oacute;dulos integrados como <strong>fs<\/strong> o <strong>http<\/strong>, los paquetes de terceros deben instalarse con <strong>npm<\/strong> antes de poder utilizarlos. As&iacute; se hace:<\/p><ol class=\"wp-block-list\">\n<li><strong>Crea una carpeta para el proyecto<\/strong>. Desde el terminal, crea una nueva carpeta en tu directorio de inicio y &aacute;brela:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir node-project\ncd node-project<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Inicializa el proyecto.<\/strong> Ejecuta este comando para generar un archivo <strong>package.json<\/strong> con la configuraci&oacute;n predeterminada:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm init -y<\/pre><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5df9c4\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5df9c4\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058530949-7.png\/public\" alt=\"The terminal showing the npm init y- command's output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">Piensa en <strong>package.json<\/strong> como el manifiesto del proyecto. Este archivo re&uacute;ne las dependencias, los scripts y los metadatos en un &uacute;nico lugar.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Instala un paquete.<\/strong> Para este ejemplo, instala <strong>dayjs<\/strong>, una biblioteca ligera para trabajar con fechas:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm install dayjs<\/pre><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5e0233\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5e0233\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058533956-8.png\/public\" alt=\"The terminal showing the npm install dayjs command's output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">Este comando descarga el paquete en la carpeta <strong>node_modules<\/strong>, a&ntilde;ade <strong>dayjs<\/strong> al campo <strong>dependencies<\/strong> de <strong>package.json<\/strong> y crea un archivo <strong>package-lock.json<\/strong> que fija la versi&oacute;n exacta instalada.<\/p><ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Utiliza el paquete en tu c&oacute;digo.<\/strong> Crea un archivo llamado <strong>index.js<\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const dayjs = require('dayjs');\n\nconst now = dayjs().format('MMMM D, YYYY');\nconsole.log(`Today is ${now}`);<\/pre><p class=\"wp-block-paragraph\">Cuando llamas a <strong>require(&lsquo;dayjs&rsquo;)<\/strong>, Node.js busca el paquete en la carpeta <strong>node_modules<\/strong>.<\/p><p class=\"wp-block-paragraph\">A continuaci&oacute;n, ejecuta <strong>node index.js<\/strong>. Ver&aacute;s la fecha actual:<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5e0ab9\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5e0ab9\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058536960-9.png\/public\" alt=\"The terminal showing the node index.js command's output: \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-como-gestiona-node-js-el-codigo-asincrono\">&iquest;C&oacute;mo gestiona Node.js el c&oacute;digo as&iacute;ncrono?<\/h2><p class=\"wp-block-paragraph\">Node.js gestiona el c&oacute;digo as&iacute;ncrono ejecutando las operaciones m&aacute;s lentas en segundo plano, mientras el resto del c&oacute;digo sigue ejecut&aacute;ndose. Este es un ejemplo r&aacute;pido:<\/p><p class=\"wp-block-paragraph\">Primero, crea <strong>async-example.js<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">**console.log('First');\n\nsetTimeout(() =&gt; {\nconsole.log('Second (after 2 seconds)');\n}, 2000);\n\nconsole.log('Third');<\/pre><p class=\"wp-block-paragraph\">A continuaci&oacute;n, ejecuta <strong>node async-example.js<\/strong> para ver el resultado:<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure class=\"wp-lightbox-container\" data-wp-context='{\"imageId\":\"6a78e2a5e1386\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a78e2a5e1386\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2026\/08\/1778058539967-10.png\/public\" alt=\"The terminal showing the node async-example.js command's output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">F&iacute;jate en que &ldquo;Third&rdquo; se muestra antes que &ldquo;Second&rdquo;, aunque aparezca despu&eacute;s en el c&oacute;digo. Esto ocurre porque <strong>setTimeout()<\/strong> programa el callback que muestra &ldquo;Second&rdquo; para que se ejecute despu&eacute;s de 2.000 milisegundos, y Node.js no espera a que termine.<\/p><p class=\"wp-block-paragraph\">Node.js registra el temporizador, pasa a la siguiente l&iacute;nea y muestra &ldquo;Third&rdquo; inmediatamente. Despu&eacute;s de dos segundos, se ejecuta el callback y aparece &ldquo;Second&rdquo;.<\/p><p class=\"wp-block-paragraph\">Este modelo no bloqueante permite que un &uacute;nico servidor Node.js gestione miles de conexiones simult&aacute;neamente. Mientras una solicitud espera una consulta a la base de datos, la lectura de un archivo o una llamada de red, el servidor sigue procesando otras solicitudes.<\/p><h2 class=\"wp-block-heading\" id=\"h-que-se-puede-crear-una-vez-aprendidos-los-conceptos-basicos-de-node-js\">&iquest;Qu&eacute; se puede crear una vez aprendidos los conceptos b&aacute;sicos de Node.js?<\/h2><p class=\"wp-block-paragraph\">Cuando domines los conceptos b&aacute;sicos de Node.js, la mejor forma de seguir aprendiendo es crear algo real. Estas son cuatro buenas opciones:<\/p><ul class=\"wp-block-list\">\n<li><strong>Crea una API REST.<\/strong> Utiliza el m&oacute;dulo <strong>http<\/strong> o un marco como Express.js para crear endpoints para solicitudes <strong>GET<\/strong>, <strong>POST<\/strong>, <strong>PUT<\/strong> y <strong>DELETE<\/strong>. Esta es la base de gran parte del desarrollo backend con Node.js y se utiliza en muchos proyectos, como la <a href=\"\/co\/tutoriales\/guia-para-principiantes-api-rest-wordpress\/\">API REST de WordPress<\/a>.<\/li>\n\n\n\n<li><strong>Crea una app full-stack.<\/strong> Combina Node.js con un marco frontend como React o Vue.js. Crea algo sencillo, como una lista de tareas o una app de notas que lea y escriba datos en una base de datos. As&iacute; entender&aacute;s mejor c&oacute;mo separar el frontend del backend y c&oacute;mo funcionan juntos.<\/li>\n\n\n\n<li><strong>Empaqueta tu app con Docker.<\/strong> Ejecutar tu app de Node.js en un contenedor de Docker mantiene las dependencias consistentes en todos los entornos. Lo que funciona en tu ordenador funcionar&aacute; de la misma forma en el servidor de producci&oacute;n, aunque cambies de servidor. Esto resuelve el cl&aacute;sico problema de &ldquo;en mi ordenador funciona&rdquo;.<\/li>\n\n\n\n<li><strong>Despliega la app en un servidor de producci&oacute;n<\/strong>. Da el siguiente paso despu&eacute;s del desarrollo local desplegando tu app de Node.js en un VPS o en un servicio de hosting administrado. All&iacute; trabajar&aacute;s con variables de entorno, gesti&oacute;n de procesos y configuraci&oacute;n de producci&oacute;n. Tambi&eacute;n aprender&aacute;s a publicar actualizaciones del c&oacute;digo y a volver a desplegar la app.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Node.js lleva JavaScript al servidor, lo que te permite ejecutar scripts, gestionar solicitudes y crear la l&oacute;gica del backend desde el terminal. Una vez que hayas instalado Node.js en el entorno que prefieras, ya sea tu ordenador, un servidor privado virtual (VPS) o un servicio de hosting administrado, podr&aacute;s empezar a ejecutar scripts, crear servidores [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/co\/tutoriales\/aprender-node-js-tutorial\/\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":190,"featured_media":47764,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"Tutorial de Node.js: qu\u00e9 hacer despu\u00e9s de instalarlo","rank_math_description":"\u00bfYa has instalado Node.js? Aprende a ejecutar scripts, utilizar m\u00f3dulos, crear un servidor HTTP e instalar paquetes con npm paso a paso.","rank_math_focus_keyword":"tutorial de Node.js","footnotes":""},"categories":[14501],"tags":[],"class_list":["post-47763","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[{"locale":"es-ES","link":"https:\/\/www.hostinger.com\/es\/tutoriales\/aprender-node-js-tutorial","default":1},{"locale":"es-AR","link":"https:\/\/www.hostinger.com\/ar\/tutoriales\/aprender-node-js-tutorial","default":0},{"locale":"es-MX","link":"https:\/\/www.hostinger.com\/mx\/tutoriales\/aprender-node-js-tutorial","default":0},{"locale":"es-CO","link":"https:\/\/www.hostinger.com\/co\/tutoriales\/aprender-node-js-tutorial","default":0}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/posts\/47763","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/users\/190"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/comments?post=47763"}],"version-history":[{"count":0,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/posts\/47763\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/media\/47764"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/media?parent=47763"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/categories?post=47763"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/tags?post=47763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}