【发布时间】:2015-04-15 02:24:28
【问题描述】:
我创建了一个 Mongoose 连接管理器来管理我的应用程序中每个用户的唯一连接。在用户登录时,我会创建一个到该用户唯一的自定义数据库 URI 的新连接。我为连接命名,以便以后可以检索(查找)它。示例调用:
var myConnection = require('connection-manager').createConnection(user._id);
正如您在此处看到的,我以用户对象的 _id 属性命名我的连接。很容易。然后,我可以使用以下方法查找该用户的唯一连接:
var myConnection = require('connection-manager').getConnection(user._id);
这两种方法之间的唯一区别是一种方法创建并返回新连接,另一种方法(getConnection() 方法)在当前连接池中进行简单查找并返回与我们传递的名称匹配的连接对象(user._id)。
这就是我遇到问题的地方。在我的服务器控制器中,我通常这样做:
var mongoose = require('mongoose'),
Foo = mongoose.model('Foo');
这真的很简单。我正在加载已使用默认 Mongoose 连接注册的模型“Foo”。这很方便,因为我的控制器的所有方法都可以通过执行以下操作来简单地调用此模型:
exports.create = function(req, res, next) {
myFoo = new Foo({whatever: whatever});
};
这是可行的,因为 Foo 是在文件开头声明和加载的。但是现在我要使用连接管理器,我需要能够在我的控制器文件中执行类似的操作:
'use strict';
var manager = require('connection-manager').getConnection(user._id),
Foo = manager.model('Foo');
exports.create = function(req, res, next) {
var myFoo = new Foo({whatever: whatever});
};
问题在于,传递给exports.create() 的请求对象是user._id 所在的位置,我需要在连接管理器中查找我的自定义连接。我该如何解决这个问题..?
【问题讨论】:
-
“但是如果我想在 create() 之外访问那个请求对象怎么办?” 请给我们一个例子,因为这没有任何意义。在 create() 之外访问它不会太有用..
-
我完全重写了我的帖子以更具体。如果这没有意义,请告诉我,我会尽我所能澄清:) 感谢您的耐心。
-
您需要在每个请求上“获取”连接。在为特定用户创建之外获取连接没有意义,因为使用此应用的多个用户将同时使用同一个文件。
-
你能再具体一点吗?我正在考虑使用中间件来处理它,但我仍然不确定它是如何工作的。
-
在评论中有点难以解释,我会发布一个答案。
标签: javascript node.js express mongoose mean-stack