TypeScript 任务调度器:node-schedule 库详细指南

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

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

开始课程

TypeScript 任务调度器:使用 node-schedule 实现自动化



在现代 Web 开发中,经常需要按计划执行代码:发送通知、清理缓存、生成报告或同步数据。对于 TypeScript 项目,最强大且灵活的库之一是 node-schedule。这是一个任务调度器,允许您使用 cron 表达式、日期或自定义规则来设置一次性任务和重复任务。



安装与配置



要安装该库,请执行以下命令:



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


安装后,您可以在 TypeScript 文件中导入该模块:



import * as schedule from 'node-schedule';


node-schedule 的主要功能



  • 基于 cron 表达式的调度 — 支持经典的 6 字段掩码(秒、分、时、日、月、星期)。
  • 一次性任务 — 在特定时间点执行代码。
  • 重复规则 — 使用 RecurrenceRule 对象创建自定义间隔。
  • 取消任务 — 能够停止已计划任务的执行。
  • 时区支持 — 在指定时区精确执行。


示例 1:简单的 cron 调度器



创建一个每分钟执行一次的任务:



import * as schedule from 'node-schedule';

const job = schedule.scheduleJob('*/1 * * * *', () => { console.log('任务已执行:', new Date().toLocaleString());});

// 5 分钟后取消任务setTimeout(() => { job.cancel(); console.log('任务已取消');}, 5 * 60 * 1000);


在此示例中,cron 表达式 '*/1 * * * *' 表示“每分钟”。请注意字段顺序:秒、分、时、日、月、星期。



示例 2:指定日期的任务



您可以将任务安排在未来的特定时间执行:



import * as schedule from 'node-schedule';

const date = new Date(2025, 11, 31, 23, 59, 0); // 2025 年 12 月 31 日 23:59

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

// 检查任务是否已计划console.log('任务是否激活:', job !== null);


示例 3:重复规则 (RecurrenceRule)



如果 cron 表达式看起来复杂,可以使用 RecurrenceRule 对象创建易于理解的规则:



import * as schedule from 'node-schedule';

const rule = new schedule.RecurrenceRule();rule.hour = 9;rule.minute = 30;rule.dayOfWeek = [1, 3, 5]; // 星期一、星期三、星期五

const job = schedule.scheduleJob(rule, () => { console.log('工作日(周一、周三、周五)早上 9:30 的晨会');});

// 一个月后取消:setTimeout(() => job.cancel(), 30 * 24 * 60 * 60 * 1000);


示例 4:带时区的任务



如果您的应用程序在不同时区运行,请指定时区:



import * as schedule from 'node-schedule';

const job = schedule.scheduleJob( { hour: 8, minute: 0, tz: 'Europe/Moscow' }, () => { console.log('莫斯科的早晨:8:00'); });


错误处理与任务取消



始终在回调函数内部进行错误处理,以避免应用程序崩溃:



import * as schedule from 'node-schedule';

const job = schedule.scheduleJob('*/5 * * * *', async () => { try { // 您的异步代码 const data = await fetchDataFromAPI(); console.log('数据已获取:', data); } catch (error) { console.error('调度器出错:',

推荐