2012-03-01 19 views
5

現在、MongoDbにセッションを保存しようとしています。NodeJS + Express + Mongoセッションストレージ

私はexpress-session-mongoとconnect-mongodbを試してみましたが、両方ともログインページを読み込もうとすると「500 internal server error」と同じです。それでどこかにmongoose-authと葛藤があるかもしれないと思うかもしれません。とにかくここ

は私の設定です:

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を使用することができますが、再びnode.js consoに500エラーの情報があります。私はログインページを読み込もうとします。

ご協力いただければ幸いです。それは、様々なモジュールの問題点終了

おかげ

+0

実際に私はexpress-session-mongoで再試行しましたが、私はまだ同じ動作をしていますが(ログインページが500エラーで失敗してしまいました)、私はMongoDbをチェックインしました。そこに期待通り。 – Lancelot

+0

FYI、connect-mongo、同じ結果を試してみました... mongoose-authはうまくいきませんか? – Lancelot

+0

everyauthモジュールのコードを掘り下げた後、私は、すべてのauth/lib/modules/password.jsで500エラーが発生したことを知ることができました。>>行47: res.render(view、locals); 残念ながら、私の立場からあまりにも助けにはなりません... :( – Lancelot

答えて

8

:/表現-セッションモンゴ・セッションのmongoを接続/接続-モンゴを、1.8.5を使用して接続2.0.1およびExpressを接続して使用しました。

ここで明らかに依存関係がクラッシュしているため、セッションストアモジュールは 'req.secret'プロパティにアクセスできませんでした。

これを動作させるために、私は、connectと同じように1.8.5を使用しているモジュールconnect-mongodbを使用して終了しました。

私は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()); 
}); 

希望がこの問題に遭遇し、誰に役立ちます。このソリューションの提案/改善があれば、それを聞いてうれしいです。 :)

+3

ありがとう、助けてくれました。私はまた、URLを指定するのではなく、Mongooseの既存の接続を使用することができました。別々のDBインスタンスを持つ複数の環境です。単に 'url'パラメータを次のように置き換えてください:' db:mongoose.connection.db' – k00k

+0

私はちょうどいいと言っています。 – Lazy

関連する問題