2016-01-27 40 views
2

尽管如此,我会解释我的问题:NodeJS定期任务

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

该系统是以NodeJS作为后端,MongoDB作为数据库和AngularJS作为前端开发的。

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

他们两人都是伟大的工具,但我跟他们两个同样的问题。问题是我需要创建计划任务以及阻止它们。使用这些工具非常清楚如何安排一段时间内执行的功能,但我怎样才能随时阻止它们?

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

我的问题是,如果有一种方法可以将计划任务“存储”在数据库中,以便能够在任何时间和任何地方阻止它们,而不是创建它们的功能。

如果这是不可能的,如果有另一种工具比我提到的那些工具更好做我所需要的。

非常感谢您的阅读和任何帮助,将不胜感激。

+0

尝试这个议程(https://github.com/rschmukler/agenda),我没有使用它,但它允许您保存所选数据库中的计划任务,如MongoDB或Redis。另外,为什么你不能创建一个简单的程序来保存你的任务在数据库中,并创建一个子进程来持续运行,检查和执行你的操作。这只是一个建议。如果你有兴趣,我很乐意贡献,因为我和其他人可能需要它。任何方式,让我们等待其他人的意见,他们可能会有所帮助。 – user3278897

+0

谢谢!看起来这个包就是我所需要的。你让我今天一整天都感觉很好。再次感谢你。 –

回答

1

好吧,我发现我的问题比添加一堆计划任务,一个购买规则更好的解决方案。现在我purchasing_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]将[起始日期] + [periodictiy]。

而现在,魔术:

我会用node-schedule在某一小时,每天安排工作。这项工作将做到以下几点:

  1. 照照purchase_rules表中的任何规则,其next_run =今天
  2. 对于找到的每一个规则:产品[PRODUCT_ID]为
    1. 购买所需的[数量]客户[CUSTOMER_ID]
    2. 制作[next_run] = [next_run] + [周期性]
  3. 完成

通过这种方式,数据库将不会与Agenda软件包一样被多次使用,并且“停止”purchase_rule我只需将其从数据库中删除即可。

我希望有一天有人会觉得这有用。