【发布时间】:2019-08-08 10:42:18
【问题描述】:
我正在开发一个 Angular(前端)和 NodeJS(API)应用程序。我想在没有任何外部电话的情况下在特定日期安排电子邮件。我探索了节点时间表。但是我应该如何确保它在我的 NodeJs API 中永远运行呢?比如我应该把代码放在哪里——在 app.js 中还是给它一个路由?
【问题讨论】:
我正在开发一个 Angular(前端)和 NodeJS(API)应用程序。我想在没有任何外部电话的情况下在特定日期安排电子邮件。我探索了节点时间表。但是我应该如何确保它在我的 NodeJs API 中永远运行呢?比如我应该把代码放在哪里——在 app.js 中还是给它一个路由?
【问题讨论】:
还有一件事,如果应用程序重新启动,那么您的计划事件将被取消。因此,如果您将事件保存在数据库中并将它们标记为完整或不完整,这可能是一个好方法。并在重新启动应用程序时重新安排您未完成的事件。
我使用它来确保所有事件都运行。
【讨论】:
你在正确的轨道上。为此,您必须使用 cron 服务。而node-schedule 是个不错的选择。
首先,创建一个名为 email-service.js 的文件。
里面放你的逻辑。
email-service.js
var node = require('node-schedule');
var sendEmail = node.scheduleJob('0 6 * * *', function(){
console.log('Starting..');
init(); // write your logic here to send email
});
function init() {
console.log('Your logic goes here.');
}
module.exports = {
cronService: cronService
}
app.js
在 app.js 中导入email-service.js。
const emailService = require('email-service')
emailService.sendEmail.start(); // start service..
您可以相应地安排一个 cron。下面是 cron 的格式。
The cron format consists of:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
【讨论】:
我们使用PM2 (https://pm2.io/runtime/) - 它是一个流程管理器,可让您的流程保持运行,并具有允许您根据 cron 计划安排节点作业运行的配置。它还有很多其他功能,但如果您希望改进 API 的操作,这个工具真的很棒——而且免费。
【讨论】:
您可以使用 node-schedule 节点模块,它有据可查。
【讨论】: