MongoStore:无法初始化客户端不接受猫鼬连接对象

问题描述

我正在尝试使用 AWS DocumentDB(AWS 品牌 MongoDB)来帮助我存储会话数据。我已经使用 mongoose 成功连接到我的 db.js 文件中的数据库

当我尝试将此 mongoose 连接作为 MongoStore 构造函数中的 mongooseConnection 参数传递给 时,出现以下错误

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

...以及应用程序的其余部分。

为了能够使用我的猫鼬连接对象作为会话存储,我需要更改什么?

我在别处看过,但像这样的问题表明我们应该能够发送实际的猫鼬连接,而不是重新发送连接字符串并加倍连接:Error: Cannot init client | mongo-connect express-session

解决方法

根据此处的文档,MongoStore 构造函数的 mongooseConnection 参数已更改为“client”:https://www.npmjs.com/package/connect-mongo

(我仍然遇到错误 - 特别是现在我得到一个'con.db'不是来自MongoStore的函数......但因为它与OP有关,答案是更改为'client'而不是'猫鼬连接'。)

对于那些追随我的人 - 特别是那些认为他们有 mongo 连接并希望将其作为 client 参数传递的人......您需要调用 getClient() 函数来帮助做到这一点 - 像这样:

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

在 connect-mongo 的迁移 wiki 中找到了这个:https://github.com/jdesboeufs/connect-mongo/blob/HEAD/MIGRATION_V4.md