Después de buscar al respecto, no puedo encontrar ninguna solución o error en mi code sobre este error. Tengo mis archivos app.js dentro de mi aplicación de nodo JS con la declaración mongo-connect :
const MongoStore = require('connect-mongo')(session)Y tengo este error:
TypeError: el constructor de clases MongoStore no se puede invocar sin 'nuevo' en Object. (/Users/souhailmohamed/project/devops/story website/app.js:11:20) en Module._compile (internal/modules/cjs/loader.js:1063:30) en Object.Module._extensions..js ( internal/modules/cjs/loader.js:1092:10) en Module.load (internal/modules/cjs/loader.js:928:32) en Function.Module._load (internal/modules/cjs/loader.js: 769:14) en Function.executeUserEntryPoint [como runMain] (internal/modules/run_main.js:72:12) en internal/main/run_main_module.js:17:47
Hay mi código app.use a continuación:
app.use(session({ secret: 'story book', resave: false, saveUninitialized: false, store: new MongoStore({ mongooseConnection: mongoose.connection }) }))Entiendo bastante bien sobre el
const MongoStore = require('connect-mongo')(session)pero no entendí el error. Pero es de un tutorial de youtube de traversy media LinK
Ok, encontré una manera de resolverlo, no sé el motivo, en qué versión de express usar, pero eliminé la (sesión) después de mongo-connect y cambié la aplicación. use a esto:
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' }) }))Estaba siguiendo lo mismo, así que descubrí un paquete npm connect-mongodb-session . Instálelo y use el mismo código de sesión que usa Brad en su video
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 }))También resolvió mi problema de registro. Si cierra la pestaña e ingresa a localhost, ya iniciará sesión
Tuve el mismo problema en mi código y lo resolví usando esto:
const MongoDbStore = require('connect-mongo');Elimine (sesión) de la instrucción require y actualice app.use() de esta manera:
// Session Config app.use( session({ secret: 'story book', resave: false, saveUninitialized: false, store: MongoDbStore.create({ mongoUrl: YourDatabaseURL }) }) );Aquí está la solución:
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: {} }) }))Yo tengo el mismo problema. Aquí está la solución:
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 }) }));connect-mongo v4 presenta una nueva firma (en comparación con v3).
Aquí está la guía oficial de migración .
Además, aquí hay una diferencia rápida de lo que cambié en mi proyecto específico (usando mongoose y dotenv ) para actualizar de connect-mongo v3 a v4:
Ciertas reglas se cambian para la sintaxis en el documento "connect-mongo" aquí
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 }));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 }) }));En su app.js haga los siguientes cambios:
let MongoStore = require('connect-mongo'); app.use( session({ secret: 'keyboard cat', resave: false, saveUninitialized: false, store: MongoStore.create({ mongoUrl: 'your mongo url' }) }); );Referencias:
Simplemente use el otro paquete npm connect-mongodb-session y debería funcionar https://www.npmjs.com/package/connect-mongodb-session
const MongoDBStore = require('connect-mongodb-session')(session);