在 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 的使用并在开发中应用此模块来进行定时任务的管理。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67cfb918e46428fe9eb99c9e