Tutorial de Node.js con ejemplos ejecutables
Un tutorial gratuito de Node.js con ejemplos que se ejecutan en la página: archivos, módulos, el event loop, servidores Express a los que envías peticiones, MongoDB y JWT. Edita el código y vuelve a ejecutarlo.
Empezar el cursoPrimeros pasos
- Qué es Node.jsNode.js es un runtime que ejecuta JavaScript fuera del navegador, en servidores y en la terminal. No es un lenguaje ni un framework: es V8, más un event loop, más APIs para archivos, red y procesos.
- Node.js vs JavaScriptJavaScript es el lenguaje; Node.js es un programa que lo ejecuta fuera del navegador. La sintaxis es idéntica, pero los globales y las APIs integradas que rodean tu código son distintos.
- process.argvprocess.argv es un array con la línea de comandos que lanzó tu programa: el ejecutable de node, la ruta del script y después cada argumento que escribiste. Usa process.argv.slice(2) para quedarte solo con tus argumentos.
- process.envprocess.env es un objeto con las variables de entorno con las que se lanzó tu programa de Node.js. Cada valor es un string o undefined, así que convierte tú los números y booleanos y dale a cada variable un valor por defecto.
- Leer entrada del usuarioNode.js no tiene una función prompt(). Para hacerle una pregunta al usuario en la terminal, crea una interfaz de readline sobre process.stdin y llama a question(), o espérala con await usando readline/promises.
Archivos y rutas
- fs.readFileLee un archivo en Node.js con fs.readFile (callback), fs.readFileSync o await readFile de fs/promises. Pasa 'utf8' para obtener un string y maneja ENOENT cuando el archivo no existe.
- fs.writeFileEscribe un archivo en Node.js con fs.writeFile, fs.writeFileSync o await writeFile de fs/promises. El archivo se crea si no existe y se reemplaza si ya existe; usa appendFile para añadir al final.
- fs/promisesfs/promises es la versión con promesas del módulo fs de Node: readFile, writeFile, readdir, stat, mkdir, rm y rename devuelven promesas que esperas con await, y los errores se capturan con try/catch.
- Módulo pathEl módulo path construye y descompone rutas de archivos de la forma correcta para el sistema operativo. path.join une segmentos; path.resolve los convierte en una ruta absoluta, partiendo de la carpeta actual.
Node asíncrono
- Event loopEl event loop de Node.js ejecuta tus callbacks por fases (timers, poll, check, close), y entre cada callback vacía la cola de process.nextTick y después la de promesas. Ejecuta los ejemplos para ver el orden exacto.
- EventEmitterEventEmitter, del módulo events de Node, permite que un objeto anuncie eventos con nombre usando emit y que otro código reaccione con on u once. Los listeners se ejecutan de forma síncrona, en el orden en que se añadieron.
HTTP y Express
- Servidor HTTP`http.createServer()` recibe una función que se ejecuta en cada petición con `req` y `res`. Lees el método y la URL de `req`, y luego pones un status, headers y un body en `res` y llamas a `res.end()`.
- Rutas en ExpressUna ruta en Express es un método, una ruta y un handler: `app.get('/users/:id', handler)`. Agrupa las rutas relacionadas en un `express.Router()` y móntalo bajo un prefijo con `app.use('/api', router)`.
- Middleware en ExpressUn middleware de Express es una función `(req, res, next)` que se ejecuta antes de tu route handler. Puede leer o cambiar la petición, terminarla con una respuesta o llamar a `next()` para pasarla al siguiente.
- req.params, query, body`req.params` contiene las partes con nombre de la ruta (`/users/:id`), `req.query` el query string (`?sort=new`), y `req.body` el body de la petición ya parseado, que es `undefined` hasta que añades un parser como `express.json()`.
- Manejo de erroresUn error handler de Express es un middleware con cuatro argumentos, `(err, req, res, next)`, registrado después de tus rutas. Express 5 le envía los errores lanzados, las llamadas a `next(err)` y las promesas rechazadas de los handlers async.
- express.static`app.use(express.static(path.join(__dirname, 'public')))` sirve cada archivo de la carpeta `public` en la URL que le corresponde: `public/style.css` responde a `/style.css`. Añade una ruta de montaje para servirlos bajo un prefijo.
- CORS en ExpressUn error CORS significa que el navegador impidió que una página leyera la respuesta de tu API porque esa respuesta no permitía el origen de la página. Se arregla en el servidor enviando `Access-Control-Allow-Origin` y respondiendo a las peticiones preflight `OPTIONS`, a mano o con el paquete `cors`.
Datos y autenticación
- MongoDBUsa MongoDB desde Node.js con el driver oficial mongodb: conéctate con MongoClient y luego inserta, busca, actualiza y borra documentos de una colección, todo con async/await.
- JWTUn JWT es un token firmado de tres partes en base64url que el servidor emite en el login y comprueba en cada petición. En Node.js lo firmas y verificas con el paquete jose o jsonwebtoken y una clave secreta.