gpt4 book ai didi

node.js - 使用 connect-mongo 和 mongoose 在 mongodb 中存储 session

转载 作者:可可西里 更新时间:2023-11-01 10:32:35 26 4
gpt4 key购买 nike

当我尝试使用 mongodb 配置 express.js session 存储时,左右出现错误。我正在为我的框架使用机车并配置了 Mongoose 。

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

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

我知道我已连接到数据库,因为我可以将我的用户拉入我的 Controller 。

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 中,我将其作为我的 session 配置

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 文档那样做,但我也遇到了错误。 ( 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
})
}));

但这也会产生错误,而且我知道数据库键实际上是未定义的

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

将此连接传递到新的 MongoStore 中我做错了什么?当我启动 console.log() Mongoose 对象时,我无法找到有关它正在使用的连接的任何信息。我确实看到了一个基础对象,但它里面没有数据库键。我是否需要将更多选项传递到 mongoose 配置中?

最佳答案

问题是机车启动的顺序。根据the docs :

When a Locomotive application is started, it proceeds through a sequence of steps:

Configure the Environment

In this step, config/environments/all.js is executed followed by the configuration file for the current environment. For instance, when running in development, config/environments/development.js is executed.

Invoke Initializers

After the environment has been configured, initializers are invoked. Initializers are used to configure sub-systems and connect to databases, message queues, and other services utilized by the application.

因此,当您的环境代码被调用时,初始化程序尚未运行并且 Mongoose 尚未配置。尝试将 Mongoose 设置移动到一个单独的文件(我自己使用 app/db/mongoose,但这是个人喜好问题)并在您的环境文件中require

关于node.js - 使用 connect-mongo 和 mongoose 在 mongodb 中存储 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com