当我尝试使用mongodb配置express.js会话存储时,我左右错误。我正在为我的框架使用机车并配置了mongoose。
在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中,我将此作为会话的配置
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
我也尝试过像connect-mongo docs那样说,但我也遇到了错误。 (https://github.com/kcbanner/connect-mongo)mongoose_connection格式为: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
我也尝试过做很多文章要做的事情。这是一个有人工作配置(Logout in ExpressJS, PassportJS and MongoStore)
的例子this.use(express.session({
secret: 'keyboard cat',
store: new MongoStore({
db: mongoose.connection.db
})
}));
但是这也会产生错误,我知道db键实际上是未定义的
throw new Error('Required MongoStore option `db` missing');
将此连接传递给新的MongoStore我做错了什么?当我启动console.log()mongoose对象时,我无法找到有关它正在使用的连接的任何信息。我确实看到了一个基础对象,但它里面没有db键。我是否需要将更多选项传递给mongoose配置?
答案 0 :(得分:2)
问题是机车启动的顺序。根据{{3}}:
启动机车应用程序时,它会继续执行 步骤顺序:
配置环境
在此步骤中,执行config / environments / all.js,然后执行 当前环境的配置文件。例如,何时 在开发中运行,config / environments / development.js是 执行。
调用初始值设定项
配置环境后,将调用初始化程序。 初始化器用于配置子系统并连接到 数据库,消息队列和其他服务 应用
因此,在调用环境代码时,初始化程序尚未运行且未配置Mongoose。尝试将Mongoose设置移动到一个单独的文件(我自己使用app/db/mongoose
,但这是个人偏好的问题)和环境文件中的require
。