在连接mongo和mongoose的mongodb中存储会话

当我尝试使用mongodbconfigurationexpress.js会话存储时,我得到了错误。 我使用机车为我的框架,并configurationmongoose。

在我的初始化程序目录02_mongoose.js我有这个。

module.exports = function() { mongoose.connect('mongodb://localhost:27018/basbac'); mongoose.model('User', UserSchema); } 

我知道我有一个连接到数据库,因为我可以拉我的用户在我的控制器。

 DeveloperController.show = function() { var self = this; var user = mongoose.model('User'); user.find().exec(function(error, users) { if(error) { console.log(error); } else { self.res.json({response: { id: self.param('id'), api: self.param('api'), users: users } }); } }); 

}

 http://localhost:3000/developer/test/?api=hhfkgjhukdsfkjhvsduhvudhcsiudvlskejfbk { response: { id: "test", api: "hhfkgjhukdsfkjhvsduhvudhcsiudvlskejfbk", users: [ { _id: "52706695a43c83a739358de5", firstname: "cad", lastname: "bane", address: "duro", email: "cad@bane.com" }, { _id: "52706695a43c83a739358de6", firstname: "jar jar", lastname: "binks", address: "naboo", email: "jarjar@binks.com" } ] } } 

在我的config / all.js里面我有这个作为我的会话configuration

 var MongoStore = require('connect-mongo')(express); var mongoose = require('mongoose'); this.use(express.cookieParser()); this.use(express.session({ secret: 'keyboard cat', store: new MongoStore({ mongoose_connection: mongoose.connection }) })); 

但是这会引发一个错误。

 this.db = new mongo.Db(options.mongoose_connection.db.databaseName, TypeError: Cannot read property 'databaseName' of undefined 

我也试图做这样的连接mongo文档说,但我也得到一个错误。 ( https://github.com/kcbanner/connect-mongo)mongoose_connection ,forms为:someMongooseDb.connections [0]以使用现有的mongoose连接。 (可选的)

 this.use(express.session({ secret: 'keyboard cat', store: new MongoStore({ mongoose_connection: mongoose.connections[0] }) })); 

但是我得到和以前一样的错误。

 this.db = new mongo.Db(options.mongoose_connection.db.databaseName, TypeError: Cannot read property 'databaseName' of undefined 

我也试着尽可能多的文章说要做。 下面是一些工作configuration的例子( 在ExpressJS,PassportJS和MongoStore中注销 )

 this.use(express.session({ secret: 'keyboard cat', store: new MongoStore({ db: mongoose.connection.db }) })); 

但是,这也产生了一个错误,我知道数据库键实际上是未定义的

 throw new Error('Required MongoStore option `db` missing'); 

我做错了什么把这个连接到新的MongoStore? 当我启动console.log()mongoose对象时,我无法find任何关于它正在使用的连接的信息。 我看到一个基础对象,但它里面没有数据库密钥。 我是否需要将更多选项传递给mongooseconfiguration?

问题在于机车启动的顺序。 根据文件 :

当机车应用程序启动时,它将按照一系列步骤进行:

configuration环境

在这一步中,执行config / environments / all.js,后面是当前环境的configuration文件。 例如,在开发中运行时,执行config / environments / development.js。

调用初始化器

环境configuration完成后,调用初始化器。 初始化器用于configuration子系统并连接到数据库,消息队列和应用程序使用的其他服务。

所以当你的环境代码被调用的时候,初始化器还没有运行,Mongoose没有configuration。 尝试将Mongoose安装程序移动到单独的文件(我自己使用app/db/mongoose ,但这是个人喜好的问题),并require在您的环境文件中。