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中间件更灵活。