有没有办法在不重新加载整个应用程序的情况下对节点应用程序进行更改?

时间:2019-09-29 05:22:16

标签: javascript node.js design-patterns

我构建了一个应用程序,该应用程序从某个URL下载pdf,然后根据特定的时间表通过电子邮件将其发送给某些人。为此,我使用了请求,nodemailer和node-schedule程序包。我创建了一个名为Jobs.js的文件,其中保存了所有作业。其结构如下所示:

module.exports = { 
    Jobs: [
    {
        URL: http://something.com, 
        Schedule: "6 * * * *",
        Sender: me@something.com, 
        Reciever: me2@something.com, 
        Subject: "periodic update", 
        SuccessMessage: "Please find attached this pdf",
        FailedMessage: function(){
            return `Unable to send email but you can download from {this.URL}`
        }
    },
    {
        URL: http://something.com, 
        Schedule: "7 * * * *",
        Sender: me3@something.com, 
        Reciever: me4@something.com, 
        Subject: "periodic update", 
        SuccessMessage: "Please find attached this pdf",
        FailedMessage: function(){
            return `Unable to send email but you can download from {this.URL}`
        }
    }
  ]
}

现在,我正在通过nodemon运行该应用程序,因此当添加新作业并保存文件时,它将自动重新启动整个应用程序。我不喜欢这样,如果其中一个正在运行时又添加了作业!它将重新启动整个应用程序,而该作业将无法完成。我希望在添加作业时应用程序能够识别该作业并将其添加到计划中。带有节点计划的计划代码非常简单:

Jobs.forEach((job) => {
    schedule.scheduleJob(job.schedule, function(){
        downloadPDF(job); 
        sendEmail(job);                 
}); 

我目前正在研究设计模式,想知道是否可以解决这个问题。到目前为止,我认为我可能已经正确地做了,是我隔离了变化。

0 个答案:

没有答案