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

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

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

1)创build与Mongo DataStore会话的快递服务器:连接或创build会话没有问题。

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)只是创build没有明确的商店:

 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) 

我只是不知道为什么..

connect-mongo是连接框架的一个中间件,它基于。

所以,你必须用express框架或者连接框架使用中间件,否则就不能工作。 这不是写成一个独立的会话库。

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

 npm install mongoose 

在全球范围内安装mongoose

 npm install -g mongoose 

app.js

 var mongoose = require("mongoose"); 

这个模块在连接数据库时被调用的构造函数中有callback,集合被初始化,所以它不会像你期望的那样工作。

我有和你一样的问题,我想要在这里瞄准相同的界面。 于是我写了另一个叫做YAMS的模块- 又一个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 })); 

这在我看来比连接mongo中间件更灵活。