Qu'est-ce que node-cron ?
node-cron est une bibliothèque légère pour Node.js qui permet d'exécuter des fonctions JavaScript selon un planning, en utilisant la syntaxe des expressions cron. Elle est idéale pour automatiser des tâches routinières : envoi de notifications par email, nettoyage de base de données, scraping de pages web ou génération de rapports.
Pourquoi un planificateur de tâches ?
En développement web, on a souvent besoin d'exécuter du code non pas immédiatement, mais à intervalles réguliers. Lancer des scripts manuellement avec setInterval() ou setTimeout() n'est pas pratique pour des plannings complexes (par exemple, « tous les deuxièmes mardis du mois à 15h00 »). node-cron résout ce problème en offrant une manière flexible et lisible de définir des horaires.
Installation
Installez la bibliothèque via npm :
npm install node-cronOu utilisez yarn :
yarn add node-cronFonctions principales
- cron.schedule(expression, callback) — exécute une fonction selon un planning.
- cron.validate(expression) — vérifie la validité d'une expression cron.
- task.stop() — arrête une tâche.
- task.start() — reprend l'exécution d'une tâche arrêtée.
- Prise en charge des secondes (champ supplémentaire au début de l'expression).
Exemple de code en JavaScript (Node.js)
Considérons un exemple simple : lancer une tâche chaque minute qui affiche l'heure actuelle dans la console.
const cron = require('node-cron');
// La tâche s'exécute chaque minuteconst task = cron.schedule('* * * * *', () => { console.log('Exécution de la tâche :', new Date().toLocaleTimeString());});
// Démarrer la tâchetask.start();
// Arrêter la tâche après 5 minutessetTimeout(() => { task.stop(); console.log('Tâche arrêtée');}, 300000);Décodage de l'expression cron : '* * * * *' — minute, heure, jour du mois, mois, jour de la semaine. L'astérisque signifie « chaque ». Par exemple, '0 9 * * 1-5' — chaque jour de la semaine à 9h00.
Exemple avec validation :
const cron = require('node-cron');
const expression = '30 4 * * 0'; // chaque dimanche à 4h30 du matinif (cron.validate(expression)) { cron.schedule(expression, () => { console.log('Nettoyage dominical des données...'); });} else { console.error('Expression cron invalide');}Quand utiliser node-cron ?
- Automatisation des sauvegardes : création de copies de sauvegarde de la base de données une fois par jour.
- Envoi de newsletters : envoi quotidien d'un digest aux abonnés.
- Monitoring : vérification de la disponibilité d'API externes toutes les 5 minutes.
- Nettoyage du cache : suppression des données obsolètes de Redis ou du système de fichiers.
- Scraping de données : téléchargement des taux de change ou des actualités selon un planning.
La bibliothèque est parfaite pour les projets de petite et moyenne envergure qui n'ont pas besoin d'un orchestrateur de tâches complet comme Bull ou Agenda. Si votre application tourne sur un seul serveur et nécessite un comportement simple de type cron, node-cron est un excellent choix.