如何使用 express-session 和 connect-mongo 查找和编辑会话?
How to find and edit a session with express-session and connect-mongo?
我使用 express-session and connect-mongo 来处理用户会话。
我需要弄清楚如何为特定用户搜索会话数据库并更新它。
我尝试使用虚假模式查询数据库并能够找到它,但是当我尝试保存它时出现错误,指出 ID 不匹配,而且当我尝试记录 ID 时从返回的文档中,它是未定义的。
错误:
Cast to ObjectId failed for value "reWCaAVbumSCW9P6g2qE705Cj6jz0qpD" at path "_id" for model "sessions"
代码:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
const SessionSchema = new Schema({}, { strict: false });
const Session = mongoose.model('sessions', SessionSchema, 'sessions');
module.exports = function (userId, callback) {
console.log('finding session for',userId);
Session.findOne({session: {$regex: userId}},(err, session)=>{
if (err) return callback(err);
if (!session) return callback('user session not found');
//parse session
var sessionJson = JSON.parse(session['_doc'].session);
//add reset flag
sessionJson.passport.user.resetSession = true;
//save back to document
session['_doc'].session = JSON.stringify(sessionJson);
//save session to database
session.save((err, savedSession)=>{
if (err) return callback(err);
//success
return callback(null);
});
});
};
任何人都可以找出 _id 字段出现问题的原因,或者向我指出一种更好的编辑会话的方法吗?注意:这不是编辑登录用户的会话,而是针对任何用户。
我上面的尝试有两个问题。
首先,我必须在 findOne
的选项中指定 lean:true
,最终返回会话 ID。因此,我还必须使用 Session.findOneAndUpdate()
而不是 document.save()
。
然后,出于某种原因,会话的 ID 似乎被保存为字符串,而不是正常的 mongoose ID 类型。所以在模式中我将 ID 类型指定为字符串。
new Schema({_id: String}, { strict: false });
在此之后,我可以更新我的会话。
我使用 express-session and connect-mongo 来处理用户会话。
我需要弄清楚如何为特定用户搜索会话数据库并更新它。
我尝试使用虚假模式查询数据库并能够找到它,但是当我尝试保存它时出现错误,指出 ID 不匹配,而且当我尝试记录 ID 时从返回的文档中,它是未定义的。
错误:
Cast to ObjectId failed for value "reWCaAVbumSCW9P6g2qE705Cj6jz0qpD" at path "_id" for model "sessions"
代码:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
const SessionSchema = new Schema({}, { strict: false });
const Session = mongoose.model('sessions', SessionSchema, 'sessions');
module.exports = function (userId, callback) {
console.log('finding session for',userId);
Session.findOne({session: {$regex: userId}},(err, session)=>{
if (err) return callback(err);
if (!session) return callback('user session not found');
//parse session
var sessionJson = JSON.parse(session['_doc'].session);
//add reset flag
sessionJson.passport.user.resetSession = true;
//save back to document
session['_doc'].session = JSON.stringify(sessionJson);
//save session to database
session.save((err, savedSession)=>{
if (err) return callback(err);
//success
return callback(null);
});
});
};
任何人都可以找出 _id 字段出现问题的原因,或者向我指出一种更好的编辑会话的方法吗?注意:这不是编辑登录用户的会话,而是针对任何用户。
我上面的尝试有两个问题。
首先,我必须在 findOne
的选项中指定 lean:true
,最终返回会话 ID。因此,我还必须使用 Session.findOneAndUpdate()
而不是 document.save()
。
然后,出于某种原因,会话的 ID 似乎被保存为字符串,而不是正常的 mongoose ID 类型。所以在模式中我将 ID 类型指定为字符串。
new Schema({_id: String}, { strict: false });
在此之后,我可以更新我的会话。