在 Web 开发中,经常需要定时执行任务,如数据备份、数据统计、发送推送消息等。本文将介绍如何使用 Express.js 和 Node-schedule 实现定时任务,并提供示例代码。
简介
Express.js 是一个流行的 Node.js Web 应用程序框架,可以快速创建 Web API 和 Web 应用程序。而 Node-schedule 是一个 Node.js 库,用于处理计划任务和定时器。
将 Express.js 和 Node-schedule 结合使用,可以轻松创建定时任务,自动执行任务并响应数据请求。
安装和配置
首先,需要在项目根目录下使用 npm 安装 Express.js 和 Node-schedule。
npm install express node-schedule
接下来,在项目中引入这两个库。
const express = require('express');
const schedule = require('node-schedule');实现定时任务
使用 Node-schedule 实现定时任务需要分两步:创建任务和启动任务。
创建任务
首先创建定时任务。可以使用 schedule.scheduleJob 方法创建定时任务,该方法有两个参数:触发时间和回调函数。
const job = schedule.scheduleJob('0 0 * * *', function() {
console.log('The task runs at midnight every day.');
});以上代码将创建一个在每天午夜 12 点运行的定时任务。
还可以使用 schedule.scheduleJob 方法的第一个参数,传递一个 cron 格式字符串来指定任务的重复间隔或启动时间。
启动任务
任务创建后,需要使用 job.cancel() 方法来取消或使用 job.reschedule(spec) 方法来重新调度它。
job.cancel();
将任务取消时,将停止执行。
如果需要重新启动任务,则需要重新创建定时任务。
Express.js 集成定时任务
当任务创建并启动后,将自动执行定时任务。但是怎样以请求方式触发定时任务并响应数据呢?
可以使用 Express.js 来创建路由,当接收到请求时,执行定时任务并响应请求。
// www.javascriptcn.com code example
const app = express();
app.get('/task', function(req, res) {
const job = schedule.scheduleJob('0 0 * * *', function() {
console.log('The task runs at midnight every day.');
// 处理任务
res.status(200).json({ message: 'Task completed successfully.' });
});
const taskInfo = {
message: 'Task created successfully.',
scheduledTime: job.nextInvocation().toISOString()
};
res.status(200).json(taskInfo);
});
app.listen(3000, function() {
console.log('Server is listening on port 3000.');
});以上代码将创建一个路由 /task,当访问这个路由时,创建并启动定时任务,执行任务,并响应成功信息。
路由处理程序也可以使用已经启动的任务,而不是每个请求都创建新的任务:
// www.javascriptcn.com code example
const job = schedule.scheduleJob('0 0 * * *', function() {
console.log('The task runs at midnight every day.');
// 处理任务
});
app.get('/task', function(req, res) {
const taskInfo = {
message: 'Task has been created.',
scheduledTime: job.nextInvocation().toISOString()
};
res.status(200).json(taskInfo);
});结语
使用 Express.js 和 Node-schedule 来实现定时任务很容易,而且可以轻松扩展任务的执行功能和响应数据的方式。可以使用 Express.js 创建 API,根据业务需求来设置定时任务。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6fa6ea941bf7134cd5b12