【发布时间】:2020-06-15 22:42:05
【问题描述】:
我是 nodeJs 的新手。 我正在开发一个平台,用户可以在其中订阅试用版或专业版。我想知道在订阅到期日期之后是否可以使用 setTimeout 方法从数据库中删除用户信息。如果这是不可能的,有没有办法做到这一点或允许您管理订阅的库?
【问题讨论】:
我是 nodeJs 的新手。 我正在开发一个平台,用户可以在其中订阅试用版或专业版。我想知道在订阅到期日期之后是否可以使用 setTimeout 方法从数据库中删除用户信息。如果这是不可能的,有没有办法做到这一点或允许您管理订阅的库?
【问题讨论】:
setTimeout 不可靠,服务可以上升或下降,你的请求应该是持久的。
您需要一个基于 DB 的离线作业管理器,例如 agenda 或类似的。
这里也广泛讨论了这个问题:I need a Nodejs scheduler that allows for tasks at different intervals
【讨论】:
你可以,但这不是一个好方法,因为你在内存上管理它,如果你的服务器重新启动,你将失去这个订阅状态。
为什么不直接将订阅日期保存在数据库中,并在用户登录时验证订阅日期与现在的差异是否大于免费订阅期限?
【讨论】:
解决您的问题的方法是运行CRON 作业。这可能每 24 小时运行一次以检查用户的订阅,如果试用期已过期,则删除该用户。您可以使用cron npm 包来实现这一点。
【讨论】:
其他解决方案:创建TTL Index。 Mongodb 会定期检查并删除过期用户。
您不需要编写任何额外的代码/逻辑。
【讨论】: