NodeJS定期任务
总之,我会解释我的问题:
我正在开发一个电子商务网站。 其中一个特点是客户可以创build采购规则 。 通过这些规则,客户可以设置开始date,周期和产品购买。 结果是产品将在[开始date]的每[周期]天内购买。
该系统以NodeJS作为后端,MongoDB作为数据库,AngularJS作为前端开发。
我发现了一些在NodeJS中调度任务的项目。 其中两个是:
- 节点时间表
- 节点的cron
他们两个都是很棒的工具,但是我和他们两个有同样的问题。 问题是我需要创build计划任务以及停止它们。 使用这些工具很清楚如何安排一段时间执行的function,但是我怎样才能随时阻止它们呢?
node-schedule和node-cron提供的对象有一个cancel()或stop()方法来停止调度,但为了调用这个方法我需要有这个对象。
我的问题是,如果有一种方法可以将计划任务“存储”在数据库中,以便能够在任何时候,从创buildfunction以外的任何地方阻止它们。
如果这是不可能的,如果有另一种工具比我所提到的做得更好,
非常感谢您的阅读和任何帮助,将不胜感激。
好吧,我find了一个更好的解决scheme,我的问题比添加一堆计划的任务,一个购买规则。 现在我的purchase_rules表如下所示:
+--------------------+ | purchase_rules | +--------------------+ | customer_id | | product_id | | quantity | | start_date | | periodicity (Days) | +--------------------+
我的解决scheme是添加字段下一次运行,所以我的表格将如下所示:
+--------------------+ | purchase_rules | +--------------------+ | customer_id | | product_id | | quantity | | start_date | | periodicity (Days) | | next_run | +--------------------+
默认情况下[next_run]将是[start_date] + [periodictiy]。
而现在,魔法:
我将使用节点时间表每天安排一个工作在某个小时。 这项工作将做到以下几点:
- 在purchase_rules表中查找其next_run = today的任何规则
- 对于find的每个规则:
- 为客户购买所需的[数量]产品[product_id] [customer_id]
- 使[next_run] = [next_run] + [周期性]
- 完
通过这种方式,数据库将不会像Agenda程序包那样被多次使用,并且为了“停止”purchase_rule,我只需要将其从数据库中删除。
我希望有一天有人会觉得这有用。