【问题标题】:How to track expirations如何跟踪到期
【发布时间】:2016-09-27 06:14:20
【问题描述】:

让我举一个例子来说明我的问题:

  • 我们有一个节点应用程序,在这种情况下我们有客户订阅。默认情况下,我们会为新客户订阅试用版(例如 30 天试用版),并且在 db 记录中会有一个 trialExpiration 日期。
  • 试用期结束后,我们希望将客户转为免费计划

可以看出,当试用期结束时,后端需要识别试用期结束。如何跟踪到期日期?通常的做法是什么?

好吧,对于我能回答的最后一个问题,也许一般的方法是在每次登录前检查过期时间并采取相应措施。另一种可能性是有一个类似 cron 的作业,它发生在到期结束的确切时间。

哪个更好以及如何处理类似 cron 的解决方案?

有什么建议吗?

【问题讨论】:

    标签: javascript node.js backend


    【解决方案1】:

    在大多数情况下,cron 工作更可取。两个原因:

    • 您通常希望将其他操作与过期相关联——例如,向用户发送一封电子邮件,说明他们的帐户已过期——当他们到达并登录时发生这种情况是没有任何意义的。
    • 您会希望您的数据库记录是最新的以用于其他目的,例如提取统计信息或计费运行。

    为了澄清上面的第二项:假设您想发送一封电子邮件,宣布对用户帐户的更改(例如隐私政策更新),但您不想将该电子邮件发送给帐户已过期的用户。从数据库中选择所有活动帐户要容易得多,而不是需要检查到期日期。你可能会说,“这很容易添加到我的代码中”,但是:如果你有另一个系统使用这个数据库,或者一个通过 RPC 查询你的系统的系统,或者你只是 shell 并运行一些原始的SQL?您突然需要在许多可能的系统(或只是在您的代码库中的位置)复制该过期检查代码,并且检查active==True 要简单得多。

    关于工作的信息,我有另一个类似问题的简短stack overflow post

    【讨论】:

      【解决方案2】:

      最好的方法是在登录时检查是否过期。我们这样做的好处是减少了数据库开销,并且不需要外部脚本、触发器,这确保了更好的可维护代码。

      【讨论】:

      • 是的,但我不喜欢这样的想法,即用户永远不会退出并总是刷新他的会话的后门,因此不会启动登录,并且用户可能会永远进入更高层次的计划。
      • 你有一个非常有效的观点。在这种情况下,您几乎必须有一个请求过滤器来检查所有传入的请求。这将是一个强大的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 2014-05-27
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多