Express 访问req.session.variable方法时出错

Express 访问req.session.variable方法时出错,express,passport.js,express-session,Express,Passport.js,Express Session,我在访问req会话的路由时添加了一个自定义对象。如果我在用户中有loggen,我使用的是passport和express router.get('/', function(req,res) { if((!req.session.myObject) && (req.isAuthenticated())) { req.session.myOBject = new myObject(); } }); 但如果我这样做的话,我会选择另一条路线 req.session.my

我在访问req会话的路由时添加了一个自定义对象。如果我在用户中有loggen,我使用的是passport和express

router.get('/', function(req,res) {
  if((!req.session.myObject) && (req.isAuthenticated())) {
    req.session.myOBject = new myObject();
  }
});
但如果我这样做的话,我会选择另一条路线

req.session.myObject.myMethod() 
我得到一个错误,myObject.myMethod不是函数,而如果在该路径中运行

var myObject = new Object();
myObject.myMethod();
这是可行的,但显然我不想在那里创建一个新对象,我希望有一个myObject,它是在我第一次查看根页面时创建的,并且是loggedIn

为什么我会出现这个错误????我怎样才能避开它


感谢会话存储对于
express Session
通常在请求之间将会话数据存储为JSON

自定义类/对象不会被直接序列化到JSON或从JSON反序列化,这意味着您必须检查您正在使用的会话存储是否提供了“钩住”(反)序列化的功能

例如,具有可用于此目的的选项,其思想是将类实例“转换”为可JSON序列化的对象,并在非序列化期间将该“对象”转换回类实例

或者,您可以在类中定义
toJSON
方法来序列化实例,并使用常规的Express中间件将此数据转换回实例

但是,所有这些的结果是为每个请求创建新的类实例。我不明白你怎么能逃避这件事

编辑:下面是一个
连接mongo
的(未测试)示例。我正在使用它轻松创建类的JSON可字符串化版本。这可能适用于您的特定情况,也可能不适用于您的特定情况,因此YMMV

// Load `serialise` and register your class with it.
const S = require('serialise');
S.serialisable(myObject);

// Create the `connect-mongo` session store instance
let store = new MongoStore({
  ...,
  serialize : session => {
    session.myObject = S.serialise(session.myObject);
    return session;
  },
  unserialize: session => {
    session.myObject = S.deserialise(session.myObject);
    return session;
  }
});

同样,上面的代码未经测试,可能会失败(我不太熟悉
connect mongo
),但希望它能给你一个如何实现的想法。

谢谢Robert,我实际上在使用connect mongo,你能给我一个如何使用serialize/unserialize的示例吗,不知道如何实现它们。