在连接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
在您的环境文件中。