Что такое node-schedule?
node-schedule — это популярная библиотека для планирования отложенных и повторяющихся задач в среде Node.js. Она написана на JavaScript, но прекрасно работает с TypeScript благодаря наличию типовых определений (DefinitelyTyped). Библиотека позволяет запускать функции в определённое время, по расписанию (cron-подобный синтаксис) или с заданными интервалами.
Зачем нужен node-schedule?
В современных веб-приложениях часто требуется выполнять фоновые операции: очистка кэша, отправка email-рассылок, резервное копирование баз данных, обновление данных из внешних API или генерация отчётов. Node-schedule решает эту задачу без использования внешних сервисов (например, cron в Linux) — всё работает прямо внутри вашего приложения на TypeScript.
Установка
Установите библиотеку и типы через npm:
npm install node-schedule
npm install --save-dev @types/node-scheduleПосле этого вы можете импортировать её в TypeScript-проекте:
import * as schedule from 'node-schedule';Основные функции
- Планирование по cron-строке — задаёте минуты, часы, дни, месяцы и дни недели.
- Планирование на конкретную дату — передаёте объект Date или строку.
- Повторение с интервалом — например, каждые 10 минут.
- Отмена задачи — можно отменить запланированное выполнение.
- Проверка наличия активных задач — метод
scheduledJobsвозвращает все активные задачи.
Пример кода на TypeScript
import * as schedule from 'node-schedule';
// Задача, которая будет выполняться каждую минуту (на 30-й секунде)
const job = schedule.scheduleJob('30 * * * * *', () => {
console.log('Задача выполнена в:', new Date().toLocaleString());
});
// Задача на конкретную дату
const date = new Date(Date.now() + 5000); // через 5 секунд
schedule.scheduleJob(date, () => {
console.log('Одноразовая задача через 5 секунд');
});
// Повторение каждые 10 секунд
const intervalJob = schedule.scheduleJob('*/10 * * * * *', () => {
console.log('Каждые 10 секунд');
});
// Отмена задачи через 20 секунд
setTimeout(() => {
job.cancel();
console.log('Первая задача отменена');
}, 20000);
// Проверка активных задач
console.log('Активные задачи:', Object.keys(schedule.scheduledJobs));Когда использовать node-schedule
- Когда нужно выполнять задачи по расписанию внутри Node.js-приложения без внешнего cron.
- Для простых фоновых задач: очистка логов, отправка писем, обновление кэша.
- Когда требуется гибкость cron-синтаксиса (например, каждый первый день месяца в 3:00).
- Если вы не хотите зависеть от операционной системы (кросс-платформенность).
Не используйте node-schedule для высоконагруженных распределённых систем — в таких случаях лучше подходят очереди задач (Bull, RabbitMQ) или облачные планировщики (AWS CloudWatch, GCP Cloud Scheduler).
Библиотека проста, легковесна и идеально подходит для небольших и средних проектов на TypeScript.