NodeJS定期任务

时间:2016-01-27 20:06:07

标签: angularjs node.js cron scheduled-tasks scheduling

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

我正在开发一个电子商务网站。其中一个功能是客户可以创建购买规则。通过这些规则,客户可以设置开始日期,周期和要购买的产品。结果是产品将从 [开始日期] [周期] 天购买。

系统开发时使用NodeJS作为后端,MongoDB作为数据库,AngularJS作为前端。

我找到了一些用于在NodeJS中安排任务的项目。其中两个是:

它们都是很棒的工具,但我和其中两个都有同样的问题。问题是我需要创建计划任务并停止它们。使用这些工具非常清楚如何安排一段时间内执行的功能,但我怎样才能在任何时候停止它们?

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

我的问题是,是否有办法将计划任务“存储”在数据库中,以便能够在任何时刻以及除创建它们之外的任何地方停止它们。

如果这是不可能的话,如果还有其他工具比我提到的更好,那就做我需要的工具。

非常感谢您阅读,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

好的,我找到了一个更好的解决方案来解决我的问题,而不是添加一堆预定任务,一个用于购买规则。现在我的purchase_rules表看起来像这样:

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

我的解决方案是在下次运行时添加字段,因此我的表格如下:

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

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

现在,魔术:

我将使用node-schedule每天在某个时间安排工作。这项工作将做到以下几点:

  1. 在purchase_rules表中查找其next_run = today
  2. 的任何规则
  3. 对于找到的每条规则:
    1. 为客户[customer_id]
    2. 购买所需[数量]的产品[product_id]
    3. 制作[next_run] = [next_run] + [周期]
  4. 完成
  5. 通过这种方式,数据库将不会像议程包一样多次加入,也不会停止"停止" purchase_rule我只需将其从数据库中删除。

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