En esta página:
¿ Alguna vez has querido que una tarea se ejecute un día y hora en Node JS ?, es decir programar una tarea. La programación de tareas es una práctica a veces necesaria en las aplicaciones modernas. En informática se denomina cron jobs, a la programación de tareas y en Node JS también se aplica la misma lógica. En este Post te enseñare a Como Programar Tareas en Node JS para que lo realizes en tus proyectos y sean más dinámicos, vamos con ello.
Antes de continuar con este Post, te invito a leer los siguientes artículos:
- Que es y Como instalar Node JS
- 10 Ventajas de usar Node JS – Parte 1
- Como Crear tu Primera Aplicación Hola Mundo con Node JS 10
- 5 Principales Frameworks para Node JS
- Mostrando el Mensaje de “Usuario esta escribiendo…” en un Chat con Node JS 14.5.0 (Socket IO 2.3.0) – Parte 1
- Gestión de Perdida o Fuga de Memoria en Node JS – Parte 1
- Convertir Callbacks a Promises en Node JS 13.7.0
- Como usar Path Aliases (Alias de Ruta) con TypeScript en Node JS 13.7
- Como crear un Bot para Twitter con Node JS 13.3
- Trabajando con HTTP 2 en Node JS 10
- Manipulando Archivos con Node JS 10
- Manipulación de URLs en Node JS 10
- Como Generar una Dirección Ethereum (Ethereum Address) con Node JS 13.3
- Como Crear un COVID-19 Dashboard con información Actualizada de Casos Diarios con Node JS 13.13 y Bootstrap 4 – Parte 1
- Puedes leer más en la categoría Node JS.
Asimismo te invito a escuchar el Podcast: “Razones Por Las Cuales Te Cuesta Aprender A Programar” y “La Inteligencia Artificial (IA) y el Machine Learning (ML) Siempre Trabajan de la Mano” (Anchor Podcast):
Spotify: | Sound Cloud: | Apple Podcasts | Anchor Podcasts |
Bien ahora continuemos con el Post: Como Programar Tareas en Node JS.
Creación de Nuevo Proyecto en Node JS
Primero creo un proyecto ejecutando el comando npm init en mi consola de comandos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
npm init Press ^C at any time to quit. package name: (nodejs-programar-tareas) version: (1.0.0) description: Programar Tareas con Node JS entry point: (index.js) app.js test command: git repository: keywords: author: Nube Colectiva license: (ISC) About to write to C:\xampp\htdocs\xampp\nc\tutoriales\blog\nodejs-programar-tareas\package.json: { "name": "nodejs-programar-tareas", "version": "1.0.0", "description": "Programar Tareas con Node JS", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Nube Colectiva", "license": "ISC" } Is this OK? (yes) y |
Todos los datos del proyecto creado se guardan dentro del archivo package.json
Como Programar Tareas en Node JS
Ahora vamos a usar el paquete node-cron, este nos permite programar tareas cron en varias aplicaciones de Node JS. Instalamos este paquete ejecutando el siguiente comando en nuestra consola de comandos:
1 2 3 4 5 6 |
npm i node-cron --save added 2 packages, and audited 3 packages in 1s found 0 vulnerabilities |
Con ello ya podemos usar el paquete node-cron en nuestro proyecto.
Para programar tareas con node-cron debemos invocar al método cron.schedule(), su sintaxis es la siguiente:
1 2 3 4 5 |
// Sintáxis del Método 'cron.schedule();' cron.schedule(expression, function, options); |
Es importante conocer que el tiempo en node-cron se compone de 6 elementos, separados por un espacio:
1 2 3 4 5 6 7 8 9 10 11 |
┌────────────── segundo (0 - 59) (opcional) │ ┌──────────── minuto (0 - 59) │ │ ┌────────── hora (0 - 23) │ │ │ ┌──────── día de mes (1 - 31) │ │ │ │ ┌────── mes (1 - 12) │ │ │ │ │ ┌──── día de la semana (0 - 6) (0 y 7 ambos representan el domingo) │ │ │ │ │ │ │ │ │ │ │ │ * * * * * * |
Podemos separar cada asterisco con uno de los siguientes caracteres para que la expresión describa la hora en que queremos que se ejecute el trabajo:
- “*”: El asterisco significa cada intervalo. Por ejemplo, si el símbolo de asterisco está en el mes, significa que la tarea se ejecutará todos los meses.
- “,”: La coma nos permite especificar una lista de valores para repetir. Por ejemplo, si tenemos 1, 3, 5 en el campo mes, la tarea se ejecutará en los meses 1,3 y 5 (enero, febrero y mayo).
- “-“: El guión nos permite especificar un rango de valores. Por ejemplo, si tenemos 1 -5 en el campo día de la semana, la tarea se ejecutará todos los días de la semana (de lunes a viernes).
- “/”: La barra inclinada o slash nos permite especificar expresiones como “cada intervalo x”. Si tenemos */4 en el campo hora, significa que la acción se realizará cada 4 horas.
El elemento segundo se puede tomar como opcional.
Si no estás seguro de escribir expresiones cron manualmente, puedes usar herramientas gratuitas como Crontab Generator o Crontab.guru para generar expresiones cron.
Otro paquete que usaré en este proyecto es express, lo instalo ejecutando el siguiente comando, en mi consola de comandos:
1 2 3 4 5 6 7 8 9 10 |
npm install express --save added 57 packages, and audited 60 packages in 2s 7 packages are looking for funding run `npm fund` for details found 0 vulnerabilities |
Ahora creamos un archivo llamado app.js para nuestro proyecto, tu le puedes poner el nombre que desees. El archivo app.js debe estar junto con el archivo package.json que contiene los datos de nuestro proyecto Node JS.
1 2 3 4 5 |
/nodejs-programar-tareas ├── app.js // Creo este Archivo ├── package.json |
Abro el archivo app.js y agrego el siguiente código (He colocado comentarios para explicar que hace cada línea de código):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
const cron = require("node-cron"); // Instancio el paquete 'node-cron' const express = require("express"); // Instancio el paquete 'express' // Creo una variable llamada 'app' y en ella coloco el método express(); del paquete 'express' const app = express(); // En el campo segundo coloc '*/5' para ejecutar una tarea en consola cada 5 segundos cron.schedule("*/5 * * * * *", function () { // Mostramos un par de mensajes con 'console.log()'. Puedes reemplazar el código con una determinada tarea que desees que se ejecute console.log("⌚⌚⌚⌚⌚"); console.log("Ejecutando una tarea cada 5 segundos"); }); // Ejecutamos la aplicación en el puerto 3000 app.listen(3000); |
En el código anterior, mostramos un par de mensajes en la consola de comandos, primero mostramos 5 emojis de reloj y debajo el mensaje “Ejecutando una tarea cada 5 segundos”.
Con ello ya estamos ejecutando una tarea cada cierto tiempo, ahora ejecutaré un poco más de código JavaScript. Haré que cada 5 segundos me formatee la fecha actual y la muestre en consola:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
const cron = require("node-cron"); // Instancio el paquete 'node-cron' const express = require("express"); // Instancio el paquete 'express' // Creo una variable llamada 'app' y en ella coloco el método express(); del paquete 'express' const app = express(); // En el campo segundo coloc '*/5' para ejecutar una tarea en consola cada 5 segundos cron.schedule("*/5 * * * * *", function () { // Mostramos un par de mensajes con 'console.log()'. Puedes reemplazar el código con una determinada tarea que desees que se ejecute /* console.log("⌚⌚⌚⌚⌚"); console.log("Ejecutando una tarea cada 5 segundos"); */ // Formateamos y Mostramos la Fecha Actual function mostrarFecha(verFecha) { let fecha, mes, anio; fecha = verFecha.getDate(); mes = verFecha.getMonth() + 1; anio = verFecha.getFullYear(); fecha = fecha .toString() .padStart(2, '0'); mes = mes .toString() .padStart(2, '0'); return `${fecha}-${mes}-${anio}`; } const resultado = mostrarFecha(new Date()); console.log(resultado); }); // Ejecutamos la aplicación en el puerto 3000 app.listen(3000); |
En el código anterior estamos ejecutando la función mostrarFecha() para que formatee la fecha actual obtenida con el métdo new Date() de JavaScript.
Nota: Hay formas más prácticas de formatear una fecha con JavaScript, pero he colocado un código extenso para que veas que igual lo ejecuta node-cron.
Conclusión
En este Post creamos una par de ejemplos para demostrar cómo programar tareas en un servidor Node JS y el vimos conceptos de como usar usar el paquete node-cron para automatizar y programar tareas repetitivas o futuras. Podemos usar esta idea en proyectos actuales y futuros.
Hay otros paquetes NPM para programar tareas en Node JS, como node-schedule, agenda, bree, cron y bull. Asegúrate de evaluar cada una para encontrar la que mejor se adapte a tu proyecto.
Nota (s)
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.