Conceptos básicos de Node.js
10 ejemplos para empezar con los Fundamentos de Node.js: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con los Fundamentos de Node.js: 7 básicos y 3 intermedios.
node --version y npm --version (npm 10+ se incluye con Node 24)."type": "module" en package.json para ESM por defecto.Confirma el entorno de ejecución antes de ejecutar cualquier script o desplegar.
console.log(process.version); // v24.18.0
console.log(process.versions.v8); // V8 engine version
console.log(process.versions.uv); // libuv versionprocess.version es la cadena autoritativa del entorno de ejecución; regístrala al inicio en producción.process.versions expone V8, libuv, OpenSSL y otros enlaces nativos.engines de package.json.Relacionado: Instalación y gestión de versiones - fija la versión LTS en todos los equipos | Política de lanzamiento y LTS de Node.js - qué puede ejecutarse en producción
nodeLa forma más sencilla de ejecutar un archivo TypeScript compilado o JavaScript plano.
// hello.mjs
console.log('Hello from Node.js', process.version);node hello.mjs.mjs o establece "type": "module" en package.json para la sintaxis ESM.node file.ts funciona con tsx en desarrollo; la producción se compila con tsc primero.Relacionado: Ejecución de scripts y Shebang - haz que los scripts sean ejecutables
fetch incorporadaNode 18+ incluye una función fetch global; no se requiere el paquete node-fetch.
const response = await fetch('https://nodejs.org/dist/index.json');
const releases = await response.json() as Array<{ version: string; lts: string | false }>;
const lts = releases.find((r) => r.lts !== false);
console.log('Current LTS tag:', lts?.lts, lts?.version);fetch devuelve objetos Response estándar web, la misma API que los navegadores.response.ok o response.status antes de analizar el cuerpo.response.body como un Web ReadableStream.Relacionado: Cómo funciona Node.js - donde la E/S se ejecuta fuera del hilo principal
La configuración pertenece al entorno, no codificada en el código fuente.
const port = Number(process.env.PORT ?? 3000);
const nodeEnv = process.env.NODE_ENV ?? 'development';
console.log(`Starting on port ${port} in ${nodeEnv} mode`);process.env es un objeto plano de valores de cadena; convierte los tipos explícitamente.?? para los valores predeterminados; la cadena vacía "" es verdadera y no pasará por ||.ESM es el camino a seguir; usa import estático al principio de los archivos.
import { readFile } from 'node:fs/promises';
import { fileURLToPath } from 'node:url';
import path from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const pkg = await readFile(path.join(__dirname, 'package.json'), 'utf8');
console.log(JSON.parse(pkg).name);node: para mayor claridad y preparación para el futuro.import.meta.url reemplaza a __filename y __dirname de CJS.await de nivel superior está permitido en módulos ESM en el ámbito del módulo.Relacionado: Cómo funciona Node.js - V8 y el cargador de módulos
try/catchLos errores asíncronos en las expresiones await se propagan como las excepciones síncronas.
async function loadConfig(): Promise<Record<string, string>> {
try {
const res = await fetch(process.env.CONFIG_URL!);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json() as Record<string, string>;
} catch (err) {
console.error('Config load failed:', err);
throw err; // vuelve a lanzar para que el proceso se cierre o un supervisor lo reinicie
}
}.catch() o usa try/catch.Prototipa APIs de forma interactiva sin crear un archivo.
node> await fetch('https://httpbin.org/get').then(r => r.json())
> Object.keys(process.versions)
> .exitawait de nivel superior cuando se inicia con node (no se necesita el indicador -e en Node 24)..save filename para guardar una sesión y .load filename para reproducirla..help listan todos los comandos con punto.Relacionado: El REPL y experimentos rápidos - flujos de trabajo REPL más profundos
node:http está incorporado; no se requiere un framework para comprobaciones de estado y sondeos.
import { createServer } from 'node:http';
const server = createServer((req, res) => {
if (req.url === '/health') {
res.writeHead(200, { 'content-type': 'application/json' });
res.end(JSON.stringify({ status: 'ok', version: process.version }));
return;
}
res.writeHead(404).end();
});
server.listen(3000, () => console.log('Listening on :3000'));createServer se ejecuta en cada solicitud; mantenla sin bloqueo.content-type explícitamente; los clientes asumen text/plain de lo contrario.node:testEl ejecutor de pruebas incorporado de Node no necesita la instalación de Jest para las pruebas unitarias.
// math.test.ts
import { test, describe } from 'node:test';
import assert from 'node:assert/strict';
function add(a: number, b: number): number {
return a + b;
}
describe('add', () => {
test('sums two numbers', () => {
assert.equal(add(2, 3), 5);
});
});node --import tsx --test math.test.tsnode:test admite describe, hooks y pruebas asíncronas de forma nativa.node:assert/strict para comprobaciones de igualdad estrictas.tsx en desarrollo para TypeScript; compila antes de CI si prefieres la salida de tsc.Escucha las señales para que los contenedores y orquestadores puedan drenar el trabajo de forma limpia.
let shuttingDown = false;
function shutdown(signal: string): void {
if (shuttingDown) return;
shuttingDown = true;
console.log(`Received ${signal}, draining...`);
setTimeout(() => process.exit(0), 2000);
}
process.on('SIGTERM', () => shutdown('SIGTERM'));
process.on('SIGINT', () => shutdown('SIGINT'));SIGTERM antes de eliminar un pod; tienes aproximadamente 30 segundos para drenar.process.exit.Relacionado: Cómo funciona Node.js - modelo de un solo hilo y manejo de señales
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 19 jul 2026