Planificador de tareas TypeScript: automatización con node-schedule
En el desarrollo web moderno, a menudo surge la necesidad de ejecutar código según un horario: enviar notificaciones, limpiar la caché, generar informes o sincronizar datos. Para proyectos TypeScript, una de las bibliotecas más potentes y flexibles es node-schedule. Es un planificador de tareas que permite programar ejecuciones tanto únicas como recurrentes utilizando expresiones cron, fechas o reglas personalizadas.
Instalación y configuración
Para instalar la biblioteca, ejecute el comando:
npm install node-schedulenpm install @types/node-schedule --save-devDespués de la instalación, puede importar el módulo en su archivo TypeScript:
import * as schedule from 'node-schedule';Funcionalidades principales de node-schedule
- Programación con expresiones cron — soporte para máscaras clásicas de 6 campos (segundos, minutos, horas, día del mes, mes, día de la semana).
- Tareas únicas — ejecución de código en un momento específico.
- Reglas recurrentes — creación de intervalos personalizados usando el objeto
RecurrenceRule. - Cancelación de tareas — posibilidad de detener la ejecución de una tarea programada.
- Soporte de zonas horarias — ejecución precisa en la zona horaria especificada.
Ejemplo 1: Planificador cron simple
Creemos una tarea que se ejecute cada minuto:
import * as schedule from 'node-schedule';
const job = schedule.scheduleJob('*/1 * * * *', () => { console.log('Tarea ejecutada:', new Date().toLocaleString());});
// Después de 5 minutos cancelamos la tareasetTimeout(() => { job.cancel(); console.log('Tarea cancelada');}, 5 * 60 * 1000);En este ejemplo, la expresión cron '*/1 * * * *' significa «cada minuto». Observe el orden de los campos: segundos, minutos, horas, día del mes, mes, día de la semana.
Ejemplo 2: Tarea con fecha específica
Puede programar la ejecución para un momento específico en el futuro:
import * as schedule from 'node-schedule';
const date = new Date(2025, 11, 31, 23, 59, 0); // 31 de diciembre de 2025, 23:59
const job = schedule.scheduleJob(date, () => { console.log('¡Año Nuevo ha llegado!');});
// Verificamos si la tarea está programadaconsole.log('Tarea activa:', job !== null);Ejemplo 3: Regla recurrente (RecurrenceRule)
Si las expresiones cron le parecen complejas, use el objeto RecurrenceRule para crear reglas claras:
import * as schedule from 'node-schedule';
const rule = new schedule.RecurrenceRule();rule.hour = 9;rule.minute = 30;rule.dayOfWeek = [1, 3, 5]; // Lunes, Miércoles, Viernes
const job = schedule.scheduleJob(rule, () => { console.log('Reunión matutina a las 9:30 los días laborables (Lun, Mié, Vie)');});
// Para cancelar después de un mes:setTimeout(() => job.cancel(), 30 * 24 * 60 * 60 * 1000);Ejemplo 4: Tarea con zona horaria
Si su aplicación funciona en diferentes zonas horarias, especifique la zona horaria:
import * as schedule from 'node-schedule';
const job = schedule.scheduleJob( { hour: 8, minute: 0, tz: 'Europe/Moscow' }, () => { console.log('Mañana en Moscú: 8:00'); });Manejo de errores y cancelación de tareas
Siempre prevea el manejo de errores dentro del callback para evitar que la aplicación se caiga:
import * as schedule from 'node-schedule';
const job = schedule.scheduleJob('*/5 * * * *', async () => { try { // Su código asíncrono const data = await fetchDataFromAPI(); console.log('Datos obtenidos:', data); } catch (error) { console.error('Error en el planificador:', También en la biblioteca
Configuración de aplicaciones Kotlin: bibliotecas y herramientas para la gestión de ajustes
Trabajo con CSV en C++: bibliotecas, análisis y escritura de datos
Monitoreo de aplicaciones C# (.NET) con AppMetrics