gpt4 book ai didi

node.js - 在 Mongoose 中跨整个应用程序共享数据库连接

转载 作者:可可西里 更新时间:2023-11-01 09:56:53 25 4
gpt4 key购买 nike

随着最新的 mongoose 更新,您不能再像我以前那样使用用户模型了。我需要在我的整个应用程序中共享相同的数据库连接。

https://github.com/LearnBoost/mongoose/issues/1249

这是不再有效的旧方法:

./models/user.js

var mongoose = require('mongoose'), cfg = require('../config')
, Schema = mongoose.Schema
, db = mongoose.createConnection(cfg.mongo.uri, cfg.mongo.db);
...

module.exports = db.model('Item', ItemSchema);

如何按照上述 github 问题中的建议重新使用数据库连接?

我在代码库的几个不同地方使用 var User = require('./models/user');

最佳答案

选项 1:使用共享对象

我的模型代码看起来很相似,但我没有重复要求模块,而是在应用程序启动时只要求它们一次,然后将结果分配给共享对象。例如,如果您使用的是 Express 应用程序,您可以像 app.locals.models.User = require('./models/user'); 这样的东西。然后任何有权访问 app 的人都可以看到你的模型而不需要 require。


选项 2:确保导出函数中的单个修改

你可以像这样定义你的用户模块:

var mongoose = require('mongoose');

var userSchema = new mongoose.Schema({name: String});

var User = null;

module.exports = function(db) {
if (db && User === null) {
User = db.model('User', userSchema);
}
return User;
};

当您启动您的应用程序时,您只需要:require('./models/user')(db)。应用程序中其他模块的后续要求可以删除 db 参数,因为 User 只会设置一次。

关于node.js - 在 Mongoose 中跨整个应用程序共享数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13873430/

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