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('调度器出错:',