如果在 NodeJS 中未确认电子邮件,则自动删除 Mongo 文档
Auto Delete Mongo Document if Email is Not Confirmed in NodeJS
我有一个使用 Express 和 Mongoose 的 NodeJS 用户注册系统。在用户创建帐户的那一刻,确认电子邮件将发送到该电子邮件,当单击 link 时,它将确认他们的帐户并让他们设置密码。如果用户在 60 分钟内没有确认他们的帐户,我想删除整个 mongo 文档。解决此问题的最佳方法是什么?
好吧 mongoose
是 mongoDB
的 javascript
包装器,因此您应该只使用常规 javascript
来完成此操作。
我会利用 pre
挂钩:
https://mongoosejs.com/docs/middleware.html#pre
我会设置 60 分钟的超时和 运行 对 mongoose
的 delete
查询,并将您响应 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);
这应该足以处理整个流程。
如果够了请告诉我! :)
我有一个使用 Express 和 Mongoose 的 NodeJS 用户注册系统。在用户创建帐户的那一刻,确认电子邮件将发送到该电子邮件,当单击 link 时,它将确认他们的帐户并让他们设置密码。如果用户在 60 分钟内没有确认他们的帐户,我想删除整个 mongo 文档。解决此问题的最佳方法是什么?
好吧 mongoose
是 mongoDB
的 javascript
包装器,因此您应该只使用常规 javascript
来完成此操作。
我会利用 pre
挂钩:
https://mongoosejs.com/docs/middleware.html#pre
我会设置 60 分钟的超时和 运行 对 mongoose
的 delete
查询,并将您响应 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);
这应该足以处理整个流程。
如果够了请告诉我! :)