在 Node.js 开发中,经常需要执行一些定时任务,例如定时备份、定时爬取数据等。而 node-cron 是一个非常方便易用的定时任务管理模块,支持 cron 表达式和时间间隔两种方式设置定时任务触发时间。本文将详细介绍如何使用 node-cron 实现定时任务管理。
1. 安装和引入 node-cron
通过 npm 安装 node-cron:
npm install node-cron --save
在项目中引入 node-cron:
const cron = require('node-cron');
2. 使用 cron 表达式
2.1 cron 表达式格式
cron 表达式是一种时间表达式,用于表示定时任务的触发时间。cron 表达式由 6 个字段组成,分别对应秒、分、时、日、月、星期。每个字段可以是一个数字、一个范围、一个列表或者一个通配符。
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
时 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W |
月 | 1-12 | , - * / |
星期 | 0-6 | , - * ? / L # |
cron 表达式示例:
-- -------------------- ---- ------- - -- -- --- - -- - - - - --- - --- - - - - - - -- - - - --- - - - - - - ----- - - - - -展开代码
2.2 设置定时任务
使用 cron.schedule() 方法设置定时任务。此方法接收一个 cron 表达式和一个回调函数,回调函数将在定时任务对应的时间触发。例如:
cron.schedule('0 12 * * *', () => { console.log('定时任务执行成功!'); });
上述代码表示每天 12 点执行一次,输出 "定时任务执行成功!"。
3. 使用时间间隔
除了使用 cron 表达式,node-cron 还支持使用时间间隔来设置定时任务。例如:
cron.schedule('*/5 * * * * *', () => { console.log('每 5 秒执行一次!'); });
上述代码表示每 5 秒执行一次,输出 "每 5 秒执行一次!"。
4. 更多参数
cron.schedule() 方法还支持其他参数,如:
- timezone:设置时区,默认为系统默认时区。
- scheduled:是否启用定时任务,默认为 true。
- task:与回调函数相同,用于指定回调任务。
例如:
-- -------------------- ---- ------- ---------------- -- - - --- -- -- - ------------------------- -- - --------- ---------------- ---------- ------ ----- -- -- - -------------------------- - ---展开代码
上述代码表示每天 12 点执行一次,时区为 Asia/Shanghai,不启用定时任务,同时还指定了一个额外的回调任务,输出 "这是另一个回调任务!"。
5. 错误处理
如果出现了错误,node-cron 会自动捕获并打印错误信息。除此之外,还可以通过监听 error 事件来处理错误,例如:
cron.schedule('* * * * *', () => { throw new Error('定时任务出错啦!'); }) .on('error', err => { console.log('定时任务出现了错误:', err.message); });
上述代码表示每分钟执行一次,但会出现错误。当错误发生时,将输出 "定时任务出现了错误:"加上错误信息。
6. 示例代码
下面是一个完整的示例代码,展示了如何使用 node-cron 执行定时任务:
-- -------------------- ---- ------- ----- ---- - --------------------- ----- ---- - -- -- - ------------------------- -- ---------------- -- - - --- ----- - --------- ---------------- ---------- ------ ----- -- -- - -------------------------- - -- ------------ --- -- - ------------------------- ------------- --- ------------------ - - - - --- -- -- - -------------- - --------- --- ---------------- - - - --- -- -- - ----- --- ------------------ ---展开代码
上述代码表示:
- 每天 12 点执行一次,但不启用定时任务,还指定了一个额外的回调任务。
- 每 5 秒执行一次。
- 每分钟执行一次,但会出现错误,并捕获错误信息。
通过以上实例,我们可以轻松学习 node-cron 的使用并在开发中应用此模块来进行定时任务的管理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cfb918e46428fe9eb99c9e