#showdev在Node.js中实现作业计划程序
在本文中,我们将了解什么是作业调度程序以及如何在nodejs中实现作业调度程序。在Node.js中实现作业计划程序
最近一篇有关Nodejs的文章,
适用于Node.js开发人员的PM2
使用webRTC和Node.js构建P2P视频聊天应用程序
使用UseCase了解Node.js中的EventEmitter
曾经想知道应用程序服务器如何定期备份文件而没有任何物理中断。这是Cron工作进来的地方。
Cron Jobs定期调度作业以执行配置为执行的操作。
在少数用例中,cron工作起着至关重要的作用。他们是,
- 删除日志文件-应用程序会生成大量日志。清除旧日志将节省服务器空间。可以使用cron作业来完成。
- 数据库备份-数据库备份可将应用程序免于灾难。 Cron工作将有助于实现这一目标。
- 应用程序逻辑-我们可以使用cron作业按时间执行一些应用程序逻辑。
Cron工作如何运作
我们将编写一个cron作业,以将旧记录归档在生产应用程序的数据库中。
首先,创建一个项目并安装以下依赖项,
npm init --yes npm install express node-cron mongoose faker
- express-node.js中的Web服务器库
- node-cron-node.js中的cron作业调度程序库
- 猫鼬-用于MongoDB的ORM
之后,创建一个名为Model.js的文件并添加以下代码
const mongoose = require('mongoose'); const weatherSchema = new mongoose.Schema({ minTemp : { type: Number }, maxTemp : { type : Number }, recordedDate : { type : Date }, isArchived : { type : Boolean, default : false } }); class Weather { static getRec(date) { return this.find({ recordedDate : { '$lte' :new Date(date) } }).exec(); } static insertBulkData(data){ return this.insertMany(data); } static archiveData(date){ return this.updateMany({ recordedDate : { '$lte' :new Date(date) } },{ $set : { isArchived : true } }).exec(); } static getArchivedData(){ return this.find({ isArchived : true }).exec(); } } weatherSchema.loadClass(Weather); module.exports = mongoose.model('Weather',weatherSchema)
主要是,Model.js为数据库表创建一个猫鼬模式,该数据库表将天气数据存储在数据库中。
之后,创建一个名为scheduler.js的文件,并添加作业调度程序的代码。
cron.schedule("* * * * * *",() => { console.log("Running every minute"); })
cron schedule会为提到的时间格式安排作业。
要了解有关cron作业格式的更多信息,请访问crontab-guru网站,该网站提供了详细说明
将猫鼬与Express连接起来,以将一些虚拟数据插入数据库。
const cron = require('node-cron'); const express = require('express'); const mongoose = require('mongoose'); const app = express(); const faker = require('faker'); const model = require('./Model'); mongoose.connect('mongodb://localhost:27017/nodescheduler').then((res) => { console.log('mongoose connected successfully'); app.get("/insertdata",async (req,res) => { let data = (); for(let i=0;i < 100;i++){ let record = { minTemp: faker.random.number(), maxTemp : faker.random.number(), recordedDate : faker.date.past() } data.push(record); } await model.insertBulkData(data); res.send("Data is inserted"); }) app.listen(4000,() => { console.log("Server is running port 4000"); }) }) .catch((err) => { console.error(err); })
使用fakerrjs插入一些虚拟数据。使用命令运行脚本,然后访问URL http:// localhost:4000 / insertdata
node scheduler.js
它将创建一些批量虚拟数据以测试作业调度程序。现在该添加作业计划程序了。
cron.schedule("* * * * */3 *",async() => { var d = new Date(); d.setMonth(d.getMonth() - 2); //1 month ago await model.archiveData(d); console.log("scheduler => archived"); })
以上cron作业将每3个月运行一次,以将数据标记为数据库中的存档。
同样,我们可以使用cron作业为我们的应用程序逻辑安排作业。
摘要
最重要的是,cron作业在某些应用程序开发用例中起着至关重要的作用。了解cron作业在应用程序开发中的工作原理总是很高兴的。
参考:https://crontab.guru