定时任务是在特定时间执行的程序,可以让开发人员根据业务需求按照固定的时间间隔自动地执行特定的代码逻辑,比如数据备份、定时清理缓存、定时发送消息提醒等。对于 Node.js 开发来说,实现定时任务需要借助一些第三方模块,其中 node-schedule 是一个非常优秀的定时任务处理模块。本文将简单记录 node-schedule 模块的各种使用方法。

node-schedule:用于实现自动执行定时任务的模块。官方文档

1.设置定时器

(1)date的第一种格式

const schedule = require('node-schedule');
function setSchedule() {
        // 每秒执行一次
	let date = '* * * * * *';
	let clock = schedule.scheduleJob(date, function() {
		console.log('当前时间:' + new Date());
	})
}
setSchedule();

schedule.scheduleJob(date,func)函数第一个参数为执行时间,第二个回调函数内编写需要执行的定时任务。
date的六个星号所代表的位置从左到右分别表示:秒、分、时、日、月、周几。例如:

每分钟的第30秒触发: '30 * * * * *'
每小时的10分30秒触发 :'30 10 * * * *'
每天的凌晨2点10分30秒触发 :'30 10 2 * * *'
每月的15日2点10分30秒触发 :'30 10 2 15 * *'
每年的1月15日2点10分30秒触发 :'30 10 2 15 1 *'
每周一的2点10分30秒触发 :'30 10 2 * * 1'
每分钟的1至10秒都会触发:1-10 * * * * *

(2)date的第二种格式

const schedule = require('node-schedule');
function setSchedule() {
        // 在 2023年7月8日20点14分整 执行
	let date = new Date('2023-07-08 20:14:00');
	let clock = schedule.scheduleJob(date, function() {
		console.log('当前时间:' + new Date());
	})
}
setSchedule();

(3)date的第三种格式

const schedule = require('node-schedule');
function setSchedule() {
	// year  month  date  hour  minute  second  dayOfWeek
	let date = {
		hour: 20,
		minute: 19,
		dayOfWeek: 6
	};
        // 在每周六的20点19分执行
	let clock = schedule.scheduleJob(date, function() {
		console.log('当前时间:' + new Date());
	})
}
setSchedule();

2.取消定时器

node-schedule 模块提供 cancel() 函数用于取消定时器。

const schedule = require('node-schedule');
function setSchedule() {
	let date = '* * * * * *';
	let clock = schedule.scheduleJob(date, function() {
		console.log('当前时间:' + new Date());
	})
        // 5秒后取消定时器
	setTimeout(function() {
		console.log('定时器取消')
		// 定时器取消
		clock.cancel()
	}, 5000)
}
setSchedule();