#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

资讯来源:由0x资讯编译自DEV,原文:https://dev.to/ganeshmani/implementing-job-schedulers-in-node-js-j2f ,版权归作者所有,未经许可,不得转载
你可能还喜欢