我构建了一个应用程序,该应用程序从某个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);
});
我目前正在研究设计模式,想知道是否可以解决这个问题。到目前为止,我认为我可能已经正确地做了,是我隔离了变化。