NodeJS + Express + Mongo Session存储

我目前正在尝试在MongoDb中存储会话。

我尝试了express-session-mongo和connect-mongodb,当我尝试加载login页面时,它们都给了我相同的“500内部服务器错误”。 这让我想,也许在某处与mongoose有冲突。

无论如何,这是我的设置:

app.js:

var MongoStore = require('connect-mongodb'); var MongoDb = require('mongodb').Db; var Server = require('mongodb').Server; var db = new MongoDb('myDb', new Server('localhost', 27017, {auto_reconnect: true, native_parser: false})); app.configure(function() { app.use(express.logger({format: 'dev'})); app.set('views', __dirname + '/../views'); app.set('view engine', 'jade'); app.set('view options', { layout: false }); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(mongooseAuth.middleware()); app.use(require('./mysite').middleware()); app.use(express.methodOverride()); }); app.configure('production', function(){ var oneWeek = 657450000; app.use(express.static(__dirname + '/../public', { maxAge: oneWeek })); app.use(express.session({ store: new MongoStore({db: db}), secret: 'super secret' })); app.use(express.errorHandler()); }); // Routes require('./routing.js'); mongooseAuth.helpExpress(app); app.listen(3000); console.log('Express server listening on port %d in %s mode', app.address().port, app.settings.env); 

userModel.js

 var Schema = mongoose.Schema; var mongooseTypes = require("mongoose-types"); var mongooseAuth = require('mongoose-auth'); mongooseTypes.loadTypes(mongoose); var everyauth = require('everyauth') everyauth.debug = true; var UserSchema = new Schema({any: {}}); UserSchema.plugin(mongooseAuth, { everymodule: { everyauth: { User: function () { return User; } } } , password: { loginWith: 'email' , extraParams: { phone: String , username: String } , everyauth: { getLoginPath: '/login' , postLoginPath: '/login' , loginView: 'account/login.jade' , getRegisterPath: '/register' , postRegisterPath: '/register' , registerView: 'account/register.jade' , loginSuccessRedirect: '/login/success' , registerSuccessRedirect: '/register/success' } } }); mongoose.model('User', UserSchema); User = mongoose.model('User'); 

在这个时候,我真的只是试图使用MongoDb作为会话存储,但是当我尝试加载login页面时,在node.js控制台中再次出现500错误,并且没有任何信息。

任何帮助将不胜感激。

谢谢

       

网上收集的解决方案 "NodeJS + Express + Mongo Session存储"

它结束了各种模块的问题:connect-session-mongo / express-session-mongo / connect-mongo,使用连接2.0.1和Express使用连接1.8.5。

显然,依赖冲突阻止了会话存储模块访问'req.secret'属性。

为了使它工作,我结束了使用模块connect-mongodb仍然使用连接1.8.5,就像Express。

之所以我不能让connect-mongodb工作,虽然是用户错误,我试图使用从在线示例,而不是我的头复制/粘贴。

这里是configuration代码,结束了connect-mongodb为我工作:

 var Session = require('connect-mongodb'); app.configure('production', function(){ var oneWeek = 657450000; app.use(express.static(__dirname + '/../public', { maxAge: oneWeek })); var session = express.session({ store: new Session({ url: 'mongodb://localhost:27017/test', maxAge: 300000 }), secret: 'superTopSecret' }); app.use(session); app.use(mongooseAuth.middleware()); app.use(require('./mySite').middleware()); app.use(express.methodOverride()); app.use(express.errorHandler()); }); 

希望这可以帮助任何遇到这个问题的人。 如果您对此解决scheme有任何build议/改进,我很乐意听到。 🙂