什么是 node-schedule?
node-schedule 是一个用于在 Node.js 环境中安排任务(类似 cron)的灵活库。它允许你使用 cron 语法、时间间隔或特定日期按时执行 JavaScript/TypeScript 函数。该库非常适合创建后台任务、定期通知、数据清理以及其他自动化流程。
为什么需要 node-schedule?
在 Web 应用中,经常需要按时间而非用户请求来执行代码。例如:发送每日报告、归档日志、检查服务器状态。node-schedule 提供了一种简单可靠的方式来实现此功能,无需复杂的队列系统。与 setInterval 不同,它支持复杂的 cron 调度,并考虑了时区。
安装
通过 npm 或 yarn 安装该库:
npm install node-schedule# 或yarn add node-schedule对于 TypeScript,额外安装类型定义:
npm install @types/node-schedule --save-dev主要功能
- Cron 调度:支持标准 cron 语法(分钟、小时、天、月)。
- 取消任务:能够取消已计划的执行。
- 一次性任务:在特定日期执行。
- 重复性任务:以固定间隔重复执行。
- 错误处理:内置错误回调支持。
TypeScript 代码示例
import * as schedule from 'node-schedule';
// 任务:每分钟执行一次const job = schedule.scheduleJob('*/1 * * * *', () => { console.log('任务执行于:', new Date().toISOString());});
// 一次性任务:10 秒后执行const date = new Date(Date.now() + 10000);schedule.scheduleJob(date, () => { console.log('一次性任务');});
// 30 秒后取消任务setTimeout(() => { job.cancel(); console.log('任务已取消');}, 30000);
// 使用重复规则的任务const rule = new schedule.RecurrenceRule();rule.hour = 14;rule.minute = 30;schedule.scheduleJob(rule, () => { console.log('每天 14:30 执行的任务');});何时使用
node-schedule 非常适用于:
- 后台工具:清理临时文件、备份。
- 通知:按计划发送邮件或推送通知。
- 监控:定期检查服务健康状态。
- 集成:按 cron 计划与外部 API 同步。
不要将 node-schedule 用于需要高精度(毫秒级)或分布式执行的任务(此类情况更适合使用 Bull 或 RabbitMQ 等队列)。
该库轻量级、无需外部依赖,并且能与 Express、NestJS 或纯 Node.js 完美配合使用。