2012-03-01 2 views
5

현재 MongoDb에 세션을 저장하는 데 많은 시간을 할애하고 있습니다.NodeJS + Express + Mongo 세션 저장

express-session-mongo와 connect-mongodb를 시도해 봤는데 로그인 페이지를로드하려고 할 때 "500 내부 서버 오류"와 같은 오류가 발생했습니다. 어느 곳에서 몽구스 - 찬성과 갈등이 있을지 모른다고 생각하게 만듭니다. 나는 정말 노력하고있어 시간이 순간

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'); 

:

app.js : 어쨌든 여기

내 설정이다 세션 저장소로 MongoDb를 사용하지만, 다시 node.js conso에서 500 오류 w/no 정보를 얻습니다. 내가 로그인 페이지를로드하려고 할 때

도움을 주시면 감사하겠습니다./표현 세션 - 몽고/연결 - 몽고 세션 몽고-연결 2.0.1 연결 사용 익스프레스 1.8.5 연결 사용 :

감사

+0

실제로 나는 express-session-mongo를 사용하여 재시도했지만 (로그인 페이지가 500 페이지 오류로 인해로드되지 않도록 시도하는) 동일한 동작을 계속하고 있지만 실제로 MongoDb를 체크인하고 세션은 실제로 거기 예상대로. – Lancelot

+0

FYI, 또한 연결 - 몽고, 같은 결과를 시도 했어요 ... 몽구스 - 인증 잘하지 재생할 수 있습니까? – Lancelot

+0

Everyauth 모듈의 코드를 조사한 결과, 모든 오류 메시지가 everyauth/lib/modules/password.js에서 발생했음을 알 수있었습니다. >> line 47 : res.render (view, locals); 불행히도 내가 서있는 곳에서 너무 많이 도움이되지 않는다 ... :( – Lancelot

답변

8

은 다양한 모듈의 문제가 존재했다.

여기서 명백히 종속성 충돌로 세션 저장소 모듈이 'req.secret'속성에 액세스하지 못했습니다.

작동하게하려면 익스프레스처럼 1.8.5 연결을 사용하는 모듈 connect-mongodb를 사용하여 종료해야합니다.

user-error가 있었지만 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()); 
}); 

희망 : 여기

는 연결-MongoDB를 나를 위해 일하고 결국 구성 코드입니다. 이 솔루션에 대한 제안/개선 사항이 있으시면 언제든지 알려 주시기 바랍니다. :)

+3

고마워, 도와 줬어. 내가 URL을 지정하는 대신 몽구스의 기존 연결을 사용할 수 있었다. 별도의 DB 인스턴스가있는 여러 환경. 'url' 매개 변수를 다음과 같이 바꾸십시오 : db : mongoose.connection.db' – k00k

+0

방금 ​​말하고 싶습니다. – Lazy