TypeScript 任务调度器:node-schedule 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

node-schedule 库:灵活的 TypeScript 任务调度器



在现代 Web 开发中,经常需要在指定时间或按计划执行特定操作。对于 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:精确日期任务



创建一个在 2024 年 12 月 31 日 23:59:59 执行的任务:



const date = new Date(2024, 11, 31, 23, 59, 59);

const job = schedule.scheduleJob(date, () => { console.log('🎉 新年快乐!');});

// 取消任务(如果需要)// job.cancel();


示例 2:使用 cron 表达式的周期性任务



每 5 分钟执行一次任务:



const job = schedule.scheduleJob('*/5 * * * *', () => {    console.log('每 5 分钟执行一次任务');});


Cron 表达式格式:秒 分 时 日 月 周。node-schedule 支持所有 6 个字段(与经典 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

推荐