node-schedule

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو node-schedule؟

node-schedule هي مكتبة مرنة لجدولة المهام (شبيهة بـ cron) في بيئة Node.js. تتيح لك تنفيذ دوال JavaScript/TypeScript وفقًا لجدول زمني باستخدام صيغة cron أو الفواصل الزمنية أو تواريخ محددة. المكتبة مثالية لإنشاء مهام الخلفية والإشعارات الدورية وتنظيف البيانات والعمليات الآلية الأخرى.

لماذا نحتاج node-schedule؟

في تطبيقات الويب، غالبًا ما يكون من الضروري تنفيذ كود ليس بناءً على طلب المستخدم، بل بناءً على الوقت. على سبيل المثال: إرسال التقارير اليومية، أرشفة السجلات، التحقق من حالة الخوادم. توفر node-schedule طريقة بسيطة وموثوقة لتحقيق ذلك دون الحاجة إلى أنظمة قوائم انتظار معقدة. على عكس setInterval، فهي تدعم جداول cron المعقدة وتراعي المناطق الزمنية.

التثبيت

قم بتثبيت المكتبة عبر npm أو yarn:

npm install node-schedule# أوyarn add node-schedule

بالنسبة لـ TypeScript، قم بتثبيت الأنواع (types) بشكل إضافي:

npm install @types/node-schedule --save-dev

الوظائف الأساسية

  • جداول Cron: دعم صيغة cron القياسية (الدقائق، الساعات، الأيام، الأشهر).
  • إلغاء المهام: إمكانية إلغاء التنفيذ المجدول.
  • المهام لمرة واحدة: التنفيذ في تاريخ محدد.
  • المهام المتكررة: التكرار بفاصل زمني ثابت.
  • معالجة الأخطاء: دعم مدمج لدوال الاسترجاع (callbacks) للأخطاء.

مثال كود بلغة TypeScript

import * as schedule from 'node-schedule';

// مهمة: كل دقيقةconst job = schedule.scheduleJob('*/1 * * * *', () => { console.log('تم تنفيذ المهمة في:', new Date().toISOString());});

// مهمة لمرة واحدة بعد 10 ثوانٍconst date = new Date(Date.now() + 10000);schedule.scheduleJob(date, () => { console.log('مهمة لمرة واحدة');});

// إلغاء المهمة بعد 30 ثانيةsetTimeout(() => { job.cancel(); console.log('تم إلغاء المهمة');}, 30000);

// مهمة بقاعدة متكررةconst rule = new schedule.RecurrenceRule();rule.hour = 14;rule.minute = 30;schedule.scheduleJob(rule, () => { console.log('مهمة في الساعة 14:30 كل يوم');});

متى تستخدمها

node-schedule مثالية لـ:

  • أدوات الخلفية: تنظيف الملفات المؤقتة، النسخ الاحتياطي.
  • الإشعارات: إرسال رسائل البريد الإلكتروني أو الإشعارات الفورية وفقًا لجدول زمني.
  • المراقبة: التحقق الدوري من صحة الخدمات.
  • التكاملات: المزامنة مع واجهات برمجة التطبيقات (APIs) الخارجية عبر cron.

لا تستخدم node-schedule للمهام التي تتطلب دقة عالية (مللي ثانية) أو تنفيذًا موزعًا (لهذا، فإن قوائم الانتظار مثل Bull أو RabbitMQ هي الأفضل).

المكتبة خفيفة الوزن، ولا تتطلب تبعيات خارجية، وتعمل بشكل ممتاز مع Express أو NestJS أو Node.js الخالص.

توصيات