1

を使用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));
});

本当に驚いたのは、上記の print ステートメントが更新されたセッション オブジェクトを実際にログに記録していることです。ただし、後でデータベースを検査すると、ドキュメントは更新されません。

また、まったく別のSessionsAlternativeコレクションを作成してみました。その場合、コレクション正しく更新されます。それは解決策ですが、私が書こうとしているものは単一のセッション コレクションに属する必要があるため、概念的には最適ではありません。

これはまったく可能ですか?もしそうなら、私は何を間違っていますか?

4

1 に答える 1