TypeError: MongoStore is not a Constructor

TypeError: MongoStore is not a Constructor

我正在制作一个带有 google 身份验证的网站。我尝试将我的会话存储在我的 mongodb 数据库中。但是当我将商店选项添加到我的快速会话时,它一直出现以下错误。

TypeError: MongoStore is not a constructor
at Object.<anonymous> (C:\Users\HP\Desktop\Website\animetography\mongodb\app.js:42:12)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47

我的app.js代码如下:

const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const morgan = require('morgan');
const exphbs = require('express-handlebars');
const methodOverride = require('method-override');
const passport = require('passport');
const session = require('express-session');
const MongoStore = require('connect-mongo');(session);
const connectDB = require('./config/db');

//Load Config

dotenv.config({path: './config/config.env'});

//Passport Config
require('./config/passport')(passport);


connectDB();

const app = express();

//Logging
if(process.env.NODE_ENV === 'development') {
    app.use('morgan'('dev'));
}

//Handebars

app.engine('.hbs', exphbs({defaultLayout: 'main', extname: '.hbs'}));
app.set('view engine', '.hbs');

// Express Sessions

app.use(
  session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection }),
  })
);

// Passport Middleware

app.use(passport.initialize());
app.use(passport.session());

//Static folder

app.use(express.static(path.join(__dirname, 'public')));


//ROUTES
app.use('/', require('./routes/index'));
app.use('/auth', require('./routes/auth'));

const port = process.env.PORT || 3000


app.listen(port,
    console.log(`Server Running in ${process.env.NODE_ENV} mode on port ${port}`)
    );

错误发生在:

store: new MongoStore({ mongooseConnection: mongoose.connection }),

有人可以告诉我我做错了什么吗?我不明白为什么会出现这个错误。

检查这一行

    store: new MongoStore({ mongooseConnection: mongoose.connection }),

删除新的应该可以解决问题。

使用 connect-mongo 连接到 MongoDB 的方法是旧的,不适用于最新版本的 connect-mongo。在

中使用 .default 而不是 (session)

const MongoStore = require('connect-mongo');(session);

所以看起来像

const MongoStore = require('connect-mongo').default;

并在快速会话中使用以下内容:

app.use(session({ store: MongoStore.create({ mongoUrl: process.env.MONGO_URI, options...})

这解决了问题

根据最新文档:https://github.com/jdesboeufs/connect-mongo/commit/f18dae083aec690f4f9a8f81283c99cf994b0558

`const MongoStore = require('connect-mongo').default;`

不应再使用,但是

const MongoStore = require('connect-mongo');

应该改用。

其余正确,文档推荐使用

app.use(session({secret: 'foo',
  store: MongoStore.create(options)
}));

选项必须包含客户端、mongoUrl 或 clientpromise

app.use(session({
  store: MongoStore.create({ mongoUrl: 'mongodb://localhost/test-app' })
}));

而不是 connect-mongo 使用 connect-mongodb-session 它应该可以工作

const MongoDBStore = require('connect-mongodb-session')(session);