ノードにおけるジョブスケジューラの実装js


本稿では、ジョブスケジューラとどのようにNodeJSでジョブスケジューラを実装する方法が表示されます.ノードにおけるジョブスケジューラの実装js
NODEJSに関する最近の記事
PM2 for Node.js developers
Building P2P Video Chat Application using webRTC and Node.js
Understanding EventEmitter in Node.js With a UseCase
今までどのようにアプリケーションサーバーを定期的に物理的な中断なし定期的にファイルをバックアップします.これはcronの仕事が来るところです.
cronジョブは、実行するように設定されたアクションを行うために定期的にジョブをスケジュールします.
cronジョブが重要な役割を果たすというユースケースはほとんどない.それらは

  • ログファイルの削除-アプリケーションログの多くを生成します.クリア古いログは、サーバー内の多くのスペースを保存します.これはcronジョブを使用して行うことができます.

  • DBのバックアップ-データベースのバックアップは、災害からアプリケーションを保存します.cronジョブはそれを行うのに役立つでしょう.

  • アプリケーションロジック- cronジョブを使用していくつかのアプリケーションロジックを一時的に行うことができます.
  • どのようにcron仕事ワークス


    cronジョブを作成して、データベース内の古いレコードを生産アプリケーションでアーカイブします.
    まず、プロジェクトを作成し、次の依存関係をインストールします.
    npm init --yes
    npm install express node-cron mongoose faker

  • NODEJSのウェブサーバライブラリ

  • ノードcron - nodejsのcronジョブスケジューラライブラリ

  • マングース・オルゴール
  • その後、モデルというファイルを作成します.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)
    主に、モデル.jsは、データベース内の気象データを格納するDBテーブルのマングーススキーマを作成します.
    その後、スケジューラというファイルを作成します.JSとジョブスケジューラのコードを追加します.
    cron.schedule("* * * * * *",() => {
        console.log("Running every minute");
    })
    cronスケジュールは、記載されている時間形式のジョブをスケジュールします.

    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);
    })
    ダミーデータを挿入するにはfakerjs . スクリプトをコマンドで実行し、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ジョブがアプリケーション開発でどのように機能するかを知ることは常に良いことです.
    あなたが最小限の努力で生産水準標準で仕事スケジューラを実装したいならば、私はあなたがチェックアウトすることを勧めますbree
    参照:https://crontab.guru