6

私は現在、MongoDb にセッションを保存しようとして、非常に苦労しています。

Express-session-mongo と connect-mongodb を試しましたが、ログイン ページを読み込もうとすると、どちらも同じ「500 内部サーバー エラー」が表示されます。これにより、どこかで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 コンソールに情報がまったくない 500 エラーが発生します。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

10

これは、connect 2.0.1 を使用する connect-session-mongo / express-session-mongo / connect-mongo と connect 1.8.5 を使用する Express のさまざまなモジュールの問題でした。

ここでの依存関係の衝突により、セッション ストア モジュールが「req.secret」プロパティにアクセスできなくなったようです。

それを機能させるために、Expressと同じように、まだ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());  
});

これが、この問題に遭遇した他の人の助けになることを願っています。このソリューションに関する提案/改善があれば、喜んでお聞きします。:)

于 2012-03-02T20:38:16.540 に答える