NodeJS 周期性任务

NodeJS Periodic tasks

首先,我将解释我的问题:

我正在开发一个电子商务网站。它的特点之一是客户可以创建 采购规则 。通过这些规则,客户可以设置开始日期、周期和要购买的产品。结果是从 [开始日期].

起每 [周期] 天购买产品

系统以NodeJS为后端,MongoDB为数据库,AngularJS为前端开发。

我找到了一些在 NodeJS 中调度任务的项目。其中两个是:

它们都是很棒的工具,但我对它们都有同样的问题。问题是我需要创建计划任务并停止它们。使用这些工具很清楚如何安排一个函数随时间执行,但我怎样才能随时停止它们?

node-schedule 和 node-cron 提供的对象有一个 cancel() 或 stop() 方法来停止调度,但要调用该方法我需要有对象。

我的问题是,是否有办法 "store" 数据库中的计划任务,以便能够随时从创建它们的函数以外的任何地方停止它们。

如果这不可能,如果有其他工具比我提到的工具更好,可以满足我的需要。

非常感谢您的阅读,如有任何帮助,我们将不胜感激。

好的,我找到了比添加一堆计划任务(一个用于采购规则)更好的解决方案。现在我的 purchasing_rules table 看起来像这样:

+--------------------+
|   purchase_rules   |
+--------------------+
| customer_id        |
| product_id         |
| quantity           |
| start_date         |
| periodicity (Days) |
+--------------------+

我的解决方案是添加下一个字段 运行,所以我的 table 看起来像:

+--------------------+
|   purchase_rules   |
+--------------------+
| customer_id        |
| product_id         |
| quantity           |
| start_date         |
| periodicity (Days) |
| next_run           |
+--------------------+

默认情况下 [next_run] 将是 [start_date] + [periodictiy]。

现在,魔法:

我将在每天的特定时间使用 node-schedule 安排工作。该作业将执行以下操作:

  1. 在 purchase_rules table 中查找任何 next_run = 今天
  2. 的规则
  3. 对于找到的每条规则:
    1. 为客户[customer_id]
    2. 购买所需[数量]的产品[product_id]
    3. 使[next_run] = [next_run] + [周期性]
  4. 完成

这样数据库就不会像使用 Agenda 包那样被访问那么多次,对于 "stopping" purchasing_rule 我只需要将它从数据库中删除。

我希望有一天有人会发现这有用。