什么是 node-schedule?
node-schedule 是一个流行的库,用于在 Node.js 环境中安排延迟和重复执行的任务。它使用 JavaScript 编写,但由于提供了类型定义(DefinitelyTyped),也能与 TypeScript 完美配合。该库允许您在特定时间、按计划(类似 cron 的语法)或按指定间隔执行函数。
为什么需要 node-schedule?
在现代 Web 应用程序中,经常需要执行后台操作:清理缓存、发送电子邮件、备份数据库、从外部 API 更新数据或生成报告。Node-schedule 无需使用外部服务(例如 Linux 中的 cron)即可解决此问题——所有操作都在您的 TypeScript 应用程序内部运行。
安装
通过 npm 安装该库及其类型定义:
npm install node-schedulenpm 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 项目。