Planificateur de tâches TypeScript : automatisation avec node-schedule
Dans le développement web moderne, il est souvent nécessaire d'exécuter du code selon un planning : envoyer des notifications, vider le cache, générer des rapports ou synchroniser des données. Pour les projets TypeScript, l'une des bibliothèques les plus puissantes et flexibles est node-schedule. C'est un planificateur de tâches qui permet de définir des exécutions ponctuelles ou récurrentes en utilisant des expressions cron, des dates ou des règles personnalisées.
Installation et configuration
Pour installer la bibliothèque, exécutez la commande :
npm install node-schedulenpm install @types/node-schedule --save-devAprès l'installation, vous pouvez importer le module dans votre fichier TypeScript :
import * as schedule from 'node-schedule';Fonctionnalités principales de node-schedule
- Planification par expressions cron — prise en charge des masques classiques à 6 champs (secondes, minutes, heures, jour du mois, mois, jour de la semaine).
- Tâches ponctuelles — exécution du code à un moment précis.
- Règles récurrentes — création d'intervalles personnalisés avec l'objet
RecurrenceRule. - Annulation de tâches — possibilité d'arrêter l'exécution d'une tâche planifiée.
- Prise en charge des fuseaux horaires — exécution précise dans le fuseau horaire spécifié.
Exemple 1 : Planificateur cron simple
Créons une tâche qui s'exécutera chaque minute :
import * as schedule from 'node-schedule';
const job = schedule.scheduleJob('*/1 * * * *', () => { console.log('Tâche exécutée :', new Date().toLocaleString());});
// Après 5 minutes, annulons la tâchesetTimeout(() => { job.cancel(); console.log('Tâche annulée');}, 5 * 60 * 1000);Dans cet exemple, l'expression cron '*/1 * * * *' signifie « chaque minute ». Notez l'ordre des champs : secondes, minutes, heures, jour du mois, mois, jour de la semaine.
Exemple 2 : Tâche avec une date spécifique
Vous pouvez planifier une exécution à un moment précis dans le futur :
import * as schedule from 'node-schedule';
const date = new Date(2025, 11, 31, 23, 59, 0); // 31 décembre 2025, 23:59
const job = schedule.scheduleJob(date, () => { console.log('Bonne année !');});
// Vérifions si la tâche est planifiéeconsole.log('Tâche active :', job !== null);Exemple 3 : Règle récurrente (RecurrenceRule)
Si les expressions cron vous semblent complexes, utilisez l'objet RecurrenceRule pour créer des règles compréhensibles :
import * as schedule from 'node-schedule';
const rule = new schedule.RecurrenceRule();rule.hour = 9;rule.minute = 30;rule.dayOfWeek = [1, 3, 5]; // Lundi, Mercredi, Vendredi
const job = schedule.scheduleJob(rule, () => { console.log('Réunion matinale à 9h30 en semaine (Lun, Mer, Ven)');});
// Pour annuler après un mois :setTimeout(() => job.cancel(), 30 * 24 * 60 * 60 * 1000);Exemple 4 : Tâche avec fuseau horaire
Si votre application fonctionne dans différents fuseaux horaires, spécifiez le fuseau :
import * as schedule from 'node-schedule';
const job = schedule.scheduleJob( { hour: 8, minute: 0, tz: 'Europe/Moscow' }, () => { console.log('Matin moscovite : 8h00'); });Gestion des erreurs et annulation des tâches
Prévoyez toujours une gestion des erreurs dans le callback pour éviter un plantage de l'application :
import * as schedule from 'node-schedule';
const job = schedule.scheduleJob('*/5 * * * *', async () => { try { // Votre code asynchrone const data = await fetchDataFromAPI(); console.log('Données reçues :', data); } catch (error) { console.error('Erreur dans le planificateur :', Aussi dans la bibliothèque
Envoi de SMS en Kotlin : Bibliothèque API smslib4k
Conteneur d'injection de dépendances en C++ : bibliothèque Fruit pour l'injection de dépendances
Tokio pour Rust : guide complet avec exemples