2012-03-01 17 views
5

वर्तमान में मुझे मोंगो डीबी में सत्रों को स्टोर करने का प्रयास करने का समय लगता है।नोडजेएस + एक्सप्रेस + मोंगो सत्र भंडारण

मैंने एक्सप्रेस-सत्र-मोंगो और कनेक्ट-मोंगोडब की कोशिश की है और जब मैं लॉगिन पेज लोड करने का प्रयास करता हूं तो दोनों मुझे एक ही "500 आंतरिक सर्वर त्रुटि" देते हैं। जो मुझे सोचने के लिए प्रेरित करता है कि कहीं कहीं मोंगोज़-एथ के साथ एक संघर्ष है।

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 त्रुटि w/कोई जानकारी नहीं मिलती जब मैं लॉगिन पेज लोड करने का प्रयास करता हूं।

किसी भी मदद की सराहना की जाएगी। कनेक्ट-सत्र-मोंगो/व्यक्त सत्र-मोंगो/कनेक्ट-मोंगो, कनेक्ट 2.0.1 का उपयोग करने और एक्सप्रेस का उपयोग कर कनेक्ट 1.8.5:

धन्यवाद

+0

वास्तव में मैंने अभी एक्सप्रेस-सत्र-मोंगो के साथ पुनः प्रयास किया है और हालांकि मुझे अभी भी वही व्यवहार मिल रहा है (लॉगिन पृष्ठ लोड करने का प्रयास करने में 500/त्रुटि विफल हो गई है), मैंने अभी मोंगो डीबी में चेक किया है और सत्र वास्तव में है उम्मीद के रूप में वहाँ। – Lancelot

+0

एफवाईआई ने कनेक्ट-मोंगो को भी कोशिश की, वही परिणाम ... mongoose-auth अच्छा खेल नहीं रहा? – Lancelot

+0

कुछ औथ मॉड्यूल के कोड में खोदने के बाद, मैं यह समझने में सक्षम था कि 500 ​​त्रुटि हरथ/lib/मॉड्यूल/password.js में हुई है >> लाइन 47: res.render (देखें, स्थानीय); दुर्भाग्यवश, जहां से मैं खड़ा हूं उससे बहुत ज्यादा मदद नहीं करता ... :( – Lancelot

उत्तर

8

यह विभिन्न मॉड्यूल की एक समस्या किया जा रहा समाप्त हो गया।

स्पष्ट रूप से निर्भरता संघर्ष ने सत्र स्टोर मॉड्यूल को 'req.secret' संपत्ति तक पहुंचने से रोका।

इसे काम करने के लिए मैंने मॉड्यूल कनेक्ट-मोंगोडब का उपयोग करना समाप्त कर दिया है जो अभी भी एक्सप्रेस की तरह 1.8.5 कनेक्ट कर रहा है।

कारण मैं उपयोगकर्ता त्रुटि होने से पहले कनेक्ट-मोंगोडब काम नहीं कर सका, मैंने अपने सिर के बजाय ऑनलाइन उदाहरणों से कॉपी/पेस्ट का उपयोग करने में बहुत मेहनत की।

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' param को प्रतिस्थापित करें: 'db: mongoose.connection.db' – k00k

+0

मैं बस कहना चाहता हूं, आप बहुत अच्छे हैं। – Lazy

संबंधित मुद्दे