14

code在搜索了它之后,我在我的这个错误中找不到任何解决方案或错误。我的app.js文件在我的节点 JS 应用程序中,mongo-connect声明如下:

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

我有这个错误:

TypeError:如果没有 Object 的“new”,就无法调用类构造函数 MongoStore。(/Users/souhailmohamed/project/devops/story website/app.js:11:20) 在 Module._compile (internal/modules/cjs/loader.js:1063:30) 在 Object.Module._extensions..js ( internal/modules/cjs/loader.js:1092:10) 在 Module.load (internal/modules/cjs/loader.js:928:32) 在 Function.Module._load (internal/modules/cjs/loader.js: 769:14) 在 Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) 在 internal/main/run_main_module.js:17:47

下面是我的app.use代码:

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

我非常了解

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

但我不明白这个错误。但它来自 traversy 媒体LinK的 youtube 教程

4

10 回答 10

12

connect-mongov4 引入了新的签名(与 v3 相比)。

这是官方迁移指南


此外,这里是我在特定项目(使用mongooseand dotenv)中从connect-mongov3 升级到 v4 所做更改的快速差异:

连接 mongo 3 到 4 差异

于 2021-05-21T06:39:38.550 回答
11

我在我的代码中遇到了同样的问题,并使用以下方法解决了它:

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

从 require 语句中删除 (session) 并像这样更新 app.use() :

// Session Config
app.use(
    session({
        secret: 'story book',
        resave: false,
        saveUninitialized: false,
        store: MongoDbStore.create({
            mongoUrl: YourDatabaseURL
        })
    })
);
于 2021-04-10T23:07:15.003 回答
4

我也遵循同样的方法,所以我发现了一个 npm pakage connect-mongodb-session。安装它并使用与布拉德在他的视频中使用的相同的会话代码

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

//sessions
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUnitialized: false,
    store: new MongoDBStore({
        mongooseConnection: mongoose.connection
    })
    //cookie: { secure: true }
}))

const store = new MongoStore({
    uri: 'your mongo uri' ,
    collection:'mySessions'
})

//express middleware
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: false,
    store: store

// Don't create a session until something is stored 
// cookie: { secure: true } - this wont work without https
}))

它也解决了我的重新登录问题。如果您关闭选项卡并租用本地主机,您已经登录了

于 2021-04-08T14:14:44.590 回答
2

好的,所以我找到了解决它的方法,我不知道原因,使用哪个版本的 express 但我在 mongo-connect 之后删除了(会话)并将 app.use 更改为:

app.use(session({
    secret: 'story book',
    resave: false,
    saveUninitialized: false,
    store: MongoStore.create({ mongoUrl: 'mongodb+srv://<id+ password>@cluster0.cq7f2.mongodb.net/DBname?retryWrites=true&w=majority' })
}))

于 2021-03-16T13:00:10.230 回答
2

此处“connect-mongo”文档中的语法更改了某些规则

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

  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: false,
  store: MongoStore.create({
    mongoUrl: process.env.MONGO_URI  //(URI FROM.env file)
  })
  //stroed it in database
}));
于 2021-05-26T18:30:31.867 回答
2

在您app.js进行以下更改:

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

app.use(
    session({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: false,
        store: MongoStore.create({
            mongoUrl: 'your mongo url'
        })
    });
);

参考:

于 2021-08-14T17:15:55.650 回答
1

我有同样的问题。这是解决方案:

var session = require('express-session');
var MongoStore = require('connect-mongo');
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;


app.use(session({
  secret : 'mysecretkey',
  resave : true,
  saveUninitialized : true,
  store :MongoStore.create({ mongoUrl: DBUrl })
}));

于 2021-05-02T08:16:53.457 回答
1
app.use(session({
  store: MongoStore.create({ mongoUrl: 'mongodb://localhost/test-app' })
}));

// Advanced usage
app.use(session({
  store: MongoStore.create({
    mongoUrl: 'mongodb://user12345:foobar@localhost/test-app?authSource=admin&w=1',
    mongoOptions: advancedOptions // See below for details
  })
}));
于 2021-08-14T11:21:29.837 回答
0

这是解决方案:

const session = require('express-session');
const MongoStore = require('connect-mongo');
const mongoose = require('mongoose');
app.use(session({
    secret: 'story book',
    resave: false,
    saveUninitialized: false,
    store: new MongoStore({
      mongoUrl: mongoose.connection._connectionString,
      mongoOptions: {}
    })
}))
于 2021-04-25T00:16:05.087 回答
0

只需使用另一个 npm 包 connect-mongodb-session 它应该可以工作 https://www.npmjs.com/package/connect-mongodb-session

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

于 2021-11-24T20:28:49.100 回答