Node.js connect-mongo数据库连接问题

时间:2011-07-08 22:29:31

标签: mongodb node.js connect

“connect-mongo”这是一个非常奇怪的问题

在我的服务器中,我有两个脚本。

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)

我只是不知道为什么......

3 个答案:

答案 0 :(得分:1)

connect-mongo是connect框架的中间件,表示基于。

因此,必须使用带有快速框架或连接框架的中间件,否则它将无法工作。它不是一个独立的会话库。

答案 1 :(得分:0)

你可以去猫鼬连接。使用npm命令安装

npm install mongoose

全局安装mongoose

npm install -g mongoose    

app.js

var mongoose = require("mongoose");

答案 2 :(得分: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中间件更灵活。