当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 住在mongodb的时间,mongoose不工作.文件不会被删除

来源:互联网 收集:自由互联 发布时间:2021-06-16
我在我的node.js应用程序中使用此方案进行会话 var mongoose = require('mongoose');var Schema = mongoose.Schema;// define the schema for our user session modelvar UserSessionSchema = new Schema({ sessionActivity: { type: Date,
我在我的node.js应用程序中使用此方案进行会话

var mongoose     = require('mongoose');
var Schema       = mongoose.Schema;
// define the schema for our user session model
var UserSessionSchema   = new Schema({
    sessionActivity:    { type: Date, expires: '15s' }, // Expire after 15 s
    user_token:         { type: String, required: true }
});
module.exports = mongoose.model('UserSession', UserSessionSchema);

我在我的应用程序中创建了一个“会话”:

...
var session = new Session();
session.user_token = profile.token;
session.save(function(save_err) {
    if (save_err) {
        ....
    } else {
        // store session id in profile
        profile.session_key = session._id;
        profile.save(function(save_err, profile) {
            if (save_err) {
                ...
            } else {
                res.json({ status: 'OK', session_id: profile.session_id });
            }
});
...

问题是文件永久存在,永不过期.它应该只能活15秒(最多一分钟).我的代码有什么问题?我试图将expries:字符串设置为数字,即15,字符串’15s’,依此类推.

var UserSessionSchema   = new Schema({
    sessionActivity:    { type: Date, expires: '15s', default: Date.now }, // Expire after 15 s
    user_token:         { type: String, required: true }
});

TTL索引在其值(应该是日期或日期数组)已经过去之后删除文档’x’秒. TTL每分钟检查一次,因此它可能比您给定的15秒更长一些.

要为日期指定默认值,可以使用Mongoose中的默认选项.它接受一个功能.在这种情况下,Date()返回当前时间戳.这会将日期设置为当前时间一次.

你也可以走这条路:

UserSessionSchema.pre("save", function(next) { 
    this.sessionActivity = new Date(); 
    next(); 
});

这将在每次调用.save()时更新值(但不是.update()).

网友评论