connect-mongo:为什么我不能写'sessions'集合?

时间:2017-12-08 21:29:55

标签: javascript express mongoose express-session connect-mongo

我正在使用CodeDBconnect-mongo,会话数据正按预期写入Mongo。

但是,我想重用express-session使用的sessions集合来在该集合中编写我自己的字段。

我在connect-mongo中定义了自己的会话模型,例如:

sessions.js

然后,在我的服务器文件中,我有:

const mongoose = require('mongoose');

const SessionSchema = new mongoose.Schema({
    _id: {},
    session: {},
    expires: {},
    myNewVariable: {}
});

const Sessions = mongoose.model('sessions', SessionSchema);

module.exports = {Sessions};

令我惊讶的是,上面的print语句实际上记录了更新的会话对象。但是,当我稍后检查数据库时,文档不会更新。

我还尝试创建一个完全不同的const session = require('express-session'); const {mongoose} = require('./db/mongoose.js'); const {Sessions} = require('./models/sessions.js'); const MongoStore = require('connect-mongo')(session); app.use(session({ secret: SECRET, resave: true, saveUninitialized: true, store: new MongoStore({ mongooseConnection: mongoose.connection }) })); app.post('/myRoute', function(req, res, next) { Sessions.findOneAndUpdate( {_id: req.session.id}, {$set:{myNewVariable: myNewValue}}, {new: true}).then((session) => { console.log('session: ' + JSON.stringify(session)); // prints OK! // Do something with the session }).catch((e) => console.log('Something went wrong: %s', e)); }); 集合。在这种情况下,集合正确更新。这将是一个解决方案,但它不是最佳的,因为从概念上我想写的应该属于单个会话集合。

这有可能吗?如果是的话,我做错了什么?

1 个答案:

答案 0 :(得分:0)

为什么不直接保存到会话?

req.session.myNewVariable = "abc";