我在 NodeJS 中有一个使用 Express 和 Mongoose 的有效用户注册系统。在用户创建帐户的那一刻,确认电子邮件将发送到该电子邮件,当单击链接时,它将确认他们的帐户并让他们设置密码。如果用户在 60 分钟内没有确认他们的帐户,我想删除整个 mongo 文档。解决这个问题的最佳方法是什么?
好吧
mongoose
是 javascript
包装纸 mongoDB
所以你应该只使用常规 javascript
来做到这一点。
我会利用
pre
钩:
https://mongoosejs.com/docs/middleware.html#pre
我会设置 60 分钟的超时并运行一个
delete
查询到 mongoose
并将您响应 setTimeout
函数获得的计时器 ID 设置为创建的实际文档。
然后,在验证帐户的情况下,我会清除计时器并删除新用户文档中的条目。
如果没有任何反应,文档将以编程方式删除。
schema.pre("save", async function(next) {
const id = setTimeout(function() {
const document = await Model.findOne(/* use some unique value with this */);
await document.remove()
}, 3600000);
this.timerId = id;
next();
}
然后在验证的情况下运行:
const document = await Model.findOne(/* find the document */);
clearTimeout(document.id);
这应该足以处理整个流程。
请告诉我是否足够! :)
不要使用 setTimeout 或 remove 方法(remove 现已弃用)对 mongoose 执行此操作。如果由于某种原因您的服务器出现故障,您可能会失去有效期。另一个原因是您无法使用该解决方案进行横向扩展。在我看来,还有更有效的方法来解决这个问题。
有三种选择: