【发布时间】:2018-08-13 01:34:00
【问题描述】:
我正在使用connect-mongo 和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 集合。在这种情况下,集合 会正确更新。这将是一个解决方案,但它不会是最佳的,因为从概念上讲,我尝试编写的内容应该属于单个会话集合。
这有可能吗,如果有,我做错了什么?
【问题讨论】:
标签: javascript express mongoose express-session connect-mongo