我在我的node.js应用程序中使用此方案进行会话 var mongoose = require('mongoose');var Schema = mongoose.Schema;// define the schema for our user session modelvar UserSessionSchema = new Schema({ sessionActivity: { type: Date,
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()).