【问题标题】:How to find and edit a session with express-session and connect-mongo?如何使用 express-session 和 connect-mongo 查找和编辑会话?
【发布时间】:2019-10-21 05:10:58
【问题描述】:

我使用express-sessionconnect-mongo 来处理用户会话。

我需要弄清楚如何在会话数据库中搜索特定用户并对其进行更新。

我尝试使用虚假架构查询数据库并且能够找到它,但是当我尝试保存它时会出现错误,提示 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 字段出现问题的原因,或者为我指出一种更好的编辑会话的方法?注意:这不是编辑登录用户的会话,而是编辑任何用户的会话。

【问题讨论】:

    标签: node.js mongodb mongoose express-session connect-mongo


    【解决方案1】:

    我的上述尝试有两个问题。

    首先我必须在findOne 的选项中指定lean:true,这最终返回了会话ID。因此,我还必须使用Session.findOneAndUpdate() 而不是document.save()

    然后,出于某种原因,会话的 ID 似乎被保存为字符串,而不是正常的猫鼬 ID 类型。因此,在架构中,我将 ID 类型指定为字符串。

    new Schema({_id: String}, { strict: false });
    

    在此之后,我能够对我的会话进行更新。

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2020-04-08
      • 1970-01-01
      • 2022-10-02
      • 2019-08-27
      • 2012-03-06
      • 1970-01-01
      • 2019-11-04
      • 2021-12-10
      相关资源
      最近更新 更多