MongoStore: не удается запустить клиент. Не принимает объект подключения мангуста

Я пытаюсь использовать AWS DocumentDB (MongoDB под брендом AWS), чтобы хранить данные сеанса. У меня уже есть успешное соединение с mongoose с базой данных в моем файле db.js.

Когда я пытаюсь передать это соединение мангуста в качестве параметра mongooseConnection в моем конструкторе MongoStore, я получаю следующую ошибку:

Assertion failed: You must provide either mongoUrl|clientPromise|client in options
xxxx/node_modules/connect-mongo/build/main/lib/MongoStore.js:119
            throw new Error('Cannot init client. Please provide correct options');
                  ^

Error: Cannot init client. Please provide correct options

Мой db.js выглядит так:

import * as fs from 'fs';
import mongoose from 'mongoose';

var ca = [fs.readFileSync("./certs/rds-combined-ca-bundle.pem")];  // AWS-provided cert

var connectionOptions = {
    useUnifiedTopology: true,
    useNewUrlParser: true,
    ssl: true,
    sslValidate: true,
    checkServerIdentity: false,
    sslCA: ca,
    replicaSet: 'rs0',
    readPreference: 'secondaryPreferred',
    retryWrites: false
};

var connectionString = 'mongodb://' + user + ':' + pwd + '@' + dbServerLocation + '/' + dbName;  // variables defined elsewhere and removed from this post.

mongoose.connect(connectionString, connectionOptions)
    .catch((err) => console.log(err));
}

export default mongoose.connection;

и мой server.js (main), который выдает ошибку, выглядит так:

import db from './db/db.js';
import session from 'express-session';
import MongoStore from 'connect-mongo';

db.on('error', () => console.error('MongoDB connection error.'));
db.on('reconnectFailed', () => console.error("Reconnection attempts to DB failed."));
db.on('connected', () => { console.log('Connected to DocumentDB database in AWS') });

import express from 'express';

const sessionStore = new MongoStore({
    mongooseConnection: db,
    collection: 'sessions'
})

var app = express();
app.use(session({
    resave: false,
    secret: 'secret word',
    saveUninitialized: true,
    store: sessionStore,
    cookie: {
        maxAge: 1000 * 60 * 60 * 24
    }
}))

... и остальное приложение.

Что мне нужно изменить, чтобы иметь возможность использовать мой объект подключения мангуста в качестве хранилища сеансов?

Я искал в другом месте, но подобные вопросы указывают на то, что мы должны иметь возможность отправить фактическое соединение мангуста, а не повторно отправлять строку соединения и удваивать количество соединений: Ошибка: не удается запустить клиент | экспресс-сессия mongo-connect


person lowcrawler    schedule 18.05.2021    source источник


Ответы (1)


Оказывается, параметр mongooseConnection в конструкторе MongoStore был изменен на 'client' согласно документации здесь: https://www.npmjs.com/package/connect-mongo

(У меня все еще возникают ошибки - в частности, теперь я получаю con.db, это не функция из MongoStore ... но, поскольку это относится к OP, ответ - изменить на «клиент» вместо «mongooseConnection». )

Для тех, кто придет после меня - особенно тех, кто думает, что у них есть соединение mongo и хочет передать его как параметр client .... вам нужно будет вызвать функцию getClient(), чтобы это произошло - например:

const sessionStore = new MongoStore({
    client: dbConnection.getClient(),
    collectionName: 'sessions'
})

Нашел это в вики по миграции для connect-mongo здесь: https://github.com/jdesboeufs/connect-mongo/blob/HEAD/MIGRATION_V4.md

person lowcrawler    schedule 18.05.2021