Session NodeJS+;Express+;Mongo会话存储
我目前正努力在MongoDb中存储会话 我尝试过express session mongo和connect mongodb,当我尝试加载登录页面时,它们都会给我相同的“500内部服务器错误”。这让我想到也许在某个地方与猫鼬有冲突 无论如何,这是我的设置: app.js: userModel.js 此时此刻,我真的只是尝试使用MongoDb作为会话存储,但当我尝试加载登录页面时,我再次在node.js控制台中收到一个500错误,没有任何信息 任何帮助都将不胜感激Session NodeJS+;Express+;Mongo会话存储,session,node.js,mongodb,express,everyauth,Session,Node.js,Mongodb,Express,Everyauth,我目前正努力在MongoDb中存储会话 我尝试过express session mongo和connect mongodb,当我尝试加载登录页面时,它们都会给我相同的“500内部服务器错误”。这让我想到也许在某个地方与猫鼬有冲突 无论如何,这是我的设置: app.js: userModel.js 此时此刻,我真的只是尝试使用MongoDb作为会话存储,但当我尝试加载登录页面时,我再次在node.js控制台中收到一个500错误,没有任何信息 任何帮助都将不胜感激 谢谢这最终是各种模块的问题:con
谢谢这最终是各种模块的问题:connect session mongo/express session mongo/connect mongo,使用connect 2.0.1,express使用connect 1.8.5 显然,这里的依赖冲突阻止了会话存储模块访问'req.secret'属性 为了让它正常工作,我使用了模块connect mongodb,它仍然使用connect 1.8.5,就像Express一样 我以前无法让connect mongodb正常工作的原因是用户错误,我试图使用在线示例的复制/粘贴来代替我的头 以下是使用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());
});
希望这能帮助其他遇到这个问题的人。如果您对此解决方案有任何建议/改进,我很高兴听到。:) 事实上,我刚刚尝试使用express session mongo,虽然我仍然得到相同的行为(尝试加载登录页面失败,出现500错误),但我刚刚签入MongoDb,会话实际上如预期的那样存在。仅供参考,我也尝试连接mongo,相同的结果。。。mongoose auth玩得不好?在深入研究everyauth模块的代码后,我所能发现的是,everyauth/lib/modules/password.js>>第47行中出现了500个错误:res.render(视图,本地);不幸的是,从我的立场来看,这并没有太大帮助…:(感谢您的帮助。我还可以使用Mongoose的现有连接,而不是指定URL。当您有多个具有单独DB实例的环境时,这一点尤其好。只需将
URL
参数替换为:DB:Mongoose.connection.DB
,我只想说,您很棒。这可能会回答这个问题这个问题,如果可能的话,你应该在你的答案中包含一个简短的解释,说明这个代码块是如何回答这个问题的。这有助于提供上下文,并使你的答案对未来的读者更有用。
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');
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());
});
const express = require('express')
const app = express()
const cookieParser = require('cookie-parser');
const session = require('express-session')
const mongoose = require('mongoose');
const MongoStore = require('connect-mongo')(session);
mongoose.connect('mongodb://localhost/my-database', {
useMongoClient: true
});
mongoose.Promise = global.Promise;
const db = mongoose.connection
app.use(cookieParser());
app.use(session({
secret: 'my-secret',
resave: false,
saveUninitialized: true,
store: new MongoStore({ mongooseConnection: db })
}));