gpt4 book ai didi

node.js - Mongoose 过期数据但保留在数据库中

转载 作者:可可西里 更新时间:2023-11-01 09:59:10 26 4
gpt4 key购买 nike

我目前通过 mongoose 模式将数据保存到数据库或从数据库中过期:

var UserSchema = new Schema({
createdAt: { type: Date, expires: '1m' },
name: String,
email: String
});

唯一的问题是保存到数据库中的文档已从数据库中完全删除。我将如何重构上面的内容,以便名称/电子邮件地址保留在数据库中,但是如果用户在他们的到期日期之后尝试登录,那么他们会收到一条消息,说“ session 已过期,更新 session ”。 (或类似的东西)

我想这样做是因为如果用户使用过期的电子邮件地址登录,服务器仍然能够查找电子邮件地址并吐出“ session 过期”消息而不是“未找到”删除数据时发生的错误。

重申一下,我如何将过期数据保存在 mongo/mongoose 数据库中,以便应用程序能够找到用户尝试登录的电子邮件地址,但如果他们的 session 已过期,他们需要续订 session ?

最佳答案

您应该为此使用架构引用 的概念。将您的 expired 字段保存在另一个表中并加入您的主 user_tableexpire_table(wxample name)

var UserSchema = new Schema({
name: String,
email: String
});

//save date by-default
//expire in 1 min as in your example
var expireSchema = new Schema({
createdAt: { type: Date, default: Date.now, expires: '1m' },
user_pk: { type: Schema.Types.ObjectId, ref: 'user_expire'}
});

var userTable = mongoose.model('user_expire', UserSchema);
var expireTable = mongoose.model('expireMe', expireSchema);

//Save new user
var newUser = new userTable({
name: 'my_name',
email: 'my_email'
});

newUser.save(function(err, result) {
console.log(result, 'saved')
var newExpire = new expireTable({
user_pk:result._id
});
//use _id of new user and save it to expire table
newExpire.save(function(err, result) {
console.log('saved relation')
})
})

现在检测session是否过期

<强>1。在数据过期之前执行此代码

expireTable.findOne()
.populate('user_pk')
.exec(function (err, result) {
if (err) throw err;
console.log(result)
if(result == null) {
console.log('session has expired, renew session')
} else {
console.log('session is active')
}
});

//output - session is active

<强>2。在数据过期后执行此代码

expireTable.findOne()
.populate('user_pk')
.exec(function (err, result) {
if (err) throw err;
console.log(result)
if(result == null) {
console.log('session has expired, renew session')
} else {
console.log('session is active')
}
});

//output - session has expired, renew session

关于node.js - Mongoose 过期数据但保留在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24596796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com