2011-07-08 56 views
2

這是一個很奇怪的問題,「連接 - 蒙戈」Node.js的連接 - 蒙戈數據庫連接問題

在我的服務器,我有兩個腳本。

1)使用Mongo DataStore創建具有會話的快速服務器:連接或創建會話都沒有問題。

MongoStore = require('connect-mongo'), 
app = require('express').createServer(


    express.session({ secret: cfg.wiki_session_secret, 
    store:new MongoStore({ 
      db: 'mydatabase', 
     host: '10.10.10.10', 
     port: 27017 
    }) 
    }) 
); 

2)剛剛創建存儲,不含任何明示:

var MongoStore = require('connect-mongo'); 

var options = {db: 'mydatabase'}; 
var store = new MongoStore(options, function() { 
    var db = new mongo.Db(options.db, new mongo.Server('10.10.10.10', 27017, {})); 

    db.open(function(err) { 
     db.collection('sessions', function(err, collection) { 
     callback(store, db, collection); 
     }); 
    }); 
    }); 

這將引發連接問題:

node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
Error: Error connecting to database 
    at /home/eauser/node_modules/connect-mongo/lib/connect-mongo.js:106:13 
    at /home/eauser/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:79:30 
    at [object Object].<anonymous> (/home/eauser/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connections/server.js:113:12) 
    at [object Object].emit (events.js:64:17) 
    at Array.<anonymous> (/home/eauser/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection.js:166:14) 
    at EventEmitter._tickCallback (node.js:126:26) 

我只是不知道爲什麼..

回答

1

connect-mongo是連接框架的一箇中間件,它是基於表達式的。

所以,你必須使用中間件與express框架或連接框架,否則它將無法正常工作。它不會被編寫爲獨立的會話庫。

0

你可以去貓鼬連接。安裝使用NPM命令

npm install mongoose 

安裝貓鼬全局

npm install -g mongoose  

app.js

var mongoose = require("mongoose"); 
0

該模塊具有在當數據庫被連接這就是所謂的構造回調,和收集被初始化,所以它不會像你期望的那樣工作。

我和你有同樣的問題,我想要在這裏設定相同的界面。所以我寫了另一個模塊叫做YAMS - Yet Another Mongo Store。這是YAMS的一個例子:

var MongoClient = require("mongodb").MongoClient; 
var Yams = require('yams'); 

var store = new Yams(function (done) { 
    //this will be called once, you must return the collection sessions. 
    MongoClient.connect('mongo://localhost/myapp', function (err, db) { 
    if (err) return done(err); 

    var sessionsCollection = db.collection('sessions') 

    //use TTL in mongodb, the document will be automatically expired when the session ends. 
    sessionsCollection.ensureIndex({expires:1}, {expireAfterSeconds: 0}, function(){}); 

    done(null, sessionsCollection); 
    }); 
}); 

app.usage(express.session({ 
    secret: 'black whisky boycott tango 2013', 
    store: store 
})); 

這在我看來比connect-mongo中間件更靈活。