“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)
我只是不知道为什么......
答案 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中间件更灵活。