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);
我正在制作一个带有 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);