1

我正在使用connect-mongowith express-session,并且会话数据正在按预期写入 Mongo。

但是,我想重用用于在该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};

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

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));
});

真正让我吃惊的是,上面的打印语句实际上记录了更新的会话对象。但是,当我稍后检查数据库时,文档没有更新。

我也尝试过创建一个完全不同的SessionsAlternative集合。在这种情况下,集合正确更新。这将是一个解决方案,但它不会是最佳的,因为从概念上讲,我要编写的内容应该属于单个会话集合。

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

4

1 回答 1

0

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

req.session.myNewVariable = "abc";

于 2018-08-12T17:32:15.097 回答