lea*_*rrr 2 mongoose mongodb node.js express
我目前通过mongoose架构保存数据并从数据库过期,如下所示:
var UserSchema = new Schema({
createdAt: { type: Date, expires: '1m' },
name: String,
email: String
});
Run Code Online (Sandbox Code Playgroud)
唯一的问题是保存到数据库的文档已从数据库中完全删除.我将如何重构上述内容,以便名称/电子邮件地址保留在数据库中,但如果用户在到期日后尝试登录,则会收到一条消息"会话已过期,续订会话".(或类似的东西)
我想这样做,因为如果用户使用过期的电子邮件地址登录,服务器仍然能够查找电子邮件地址并吐出"过期的会话"消息,而不是"未找到"错误,这是删除数据时会发生什么.
重申一下,如何将过期数据保存在mongo/mongoose数据库中,以便应用程序能够找到用户尝试登录的电子邮件地址,但如果他们的会话已过期,他们需要续订会话吗?
您应该使用Schema Reference的概念.将您过期的字段保存在另一个表中并加入您的主要user_table和expire_table(例如名称)
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')
})
})
Run Code Online (Sandbox Code Playgroud)
现在检测会话是否已过期
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3877 次 |
| 最近记录: |