مكتبة node-schedule: مخطط مهام مرن بلغة TypeScript
في تطوير الويب الحديث، غالبًا ما تنشأ الحاجة لتنفيذ إجراءات معينة في وقت محدد أو وفقًا لجدول زمني. بالنسبة للنظام البيئي Node.js وTypeScript، توجد عدة حلول، لكن node-schedule تتميز بمرونتها وبساطتها. تتيح هذه المكتبة إنشاء مهام لمرة واحدة في تاريخ محدد، بالإضافة إلى مهام متكررة باستخدام تعبيرات cron أو فترات زمنية قابلة للقراءة البشرية.
الإمكانيات الأساسية لـ node-schedule
- وقت تنفيذ دقيق – تشغيل المهمة في لحظة زمنية محددة (تاريخ + وقت)
- تعبيرات cron – بناء جملة كلاسيكي للمهام الدورية (كل دقيقة، كل ساعة، إلخ)
- قواعد متكررة – إعداد مرن للتكرار باستخدام كائن
RecurrenceRule - الإلغاء والإيقاف المؤقت – التحكم في المهام النشطة
- دعم المناطق الزمنية – العمل مع الوقت المحلي
التثبيت والاستيراد
للبدء، قم بتثبيت الحزمة عبر npm:
npm install node-schedulenpm install @types/node-schedule --save-devالاستيراد في ملف TypeScript:
import * as schedule from 'node-schedule';مثال 1: مهمة في تاريخ محدد
لننشئ مهمة سيتم تنفيذها في 31 ديسمبر 2024 الساعة 23:59:59:
const date = new Date(2024, 11, 31, 23, 59, 59);
const job = schedule.scheduleJob(date, () => { console.log('🎉 سنة جديدة سعيدة 2025!');});
// إلغاء المهمة (إذا لزم الأمر)// job.cancel();مثال 2: مهمة دورية باستخدام تعبير cron
تشغيل المهمة كل 5 دقائق:
const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('تنفيذ المهمة كل 5 دقائق');});تنسيق تعبير cron: ثانية دقيقة ساعة يوم_شهر شهر يوم_أسبوع. في node-schedule، يتم دعم جميع الحقول الستة (على عكس cron الكلاسيكي الذي يحتوي على 5 حقول).
مثال 3: استخدام RecurrenceRule
لننشئ مهمة يتم تنفيذها كل ثلاثاء وخميس الساعة 10:30 صباحًا:
const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [2, 4]; // الثلاثاء والخميسrule.hour = 10;rule.minute = 30;
const job = schedule.scheduleJob(rule, () => { console.log('إرسال التقرير الأسبوعي');});يدعم RecurrenceRule الحقول التالية:
year– السنة أو مصفوفة من السنواتmonth– الشهر (0-11) أو مصفوفةdate– يوم الشهر (1-31)dayOfWeek– يوم الأسبوع (0-6، حيث 0 هو الأحد)hour– الساعة (0-23)minute– الدقيقة (0-59)second– الثانية (0-59)
مثال 4: قواعد مركبة
مهمة يتم تنفيذها في آخر يوم من كل شهر الساعة 23:59:
const rule = new schedule.RecurrenceRule();rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; // جميع الأشهرrule.date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // آخر أيام كل شهرrule.hour = 23;rule.minute = 59;rule.second = 59;
const job = schedule.scheduleJob(rule, () => { console.log('تنفيذ في آخر يوم من الشهر');});إدارة المهام
توفر المكتبة طرقًا للتحكم الكامل في المهام:
// إنشاء مهمةconst job = schedule.scheduleJob('*/10 * * * * *', () => { console.log('كل 10 ثوانٍ');});
// إلغاء المهمةjob.cancel();
// التحقق مما إذا كانت المهمة نشطةconsole.log(job.pending()); // true أو false
// إلغاء جميع المهامschedule.gracefulShutdow