Я создал менеджер соединений Mongoose для управления уникальным подключением для каждого пользователя в моем приложении. В то время, когда пользователь входит в систему, я создаю новое подключение к пользовательскому URI базы данных, который является уникальным для этого пользователя. Я называю соединение так, чтобы его можно было найти (посмотрел вверх) позже. Пример invocation:MEAN.JS - Запросить объекты, Экспресс-контроллеры и схемы Mongoose
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');
Это действительно прямолинейно. Я загружаю модель «Foo», которая была зарегистрирована с использованием соединения Mongoose по умолчанию. Это удобно, потому что все методы моего контроллера могут просто вызвать эту модель, делая что-то вроде:
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() не будет слишком полезен. –
Я полностью переписал свое сообщение, чтобы быть более конкретным. Пожалуйста, дайте мне знать, если это не имеет смысла, и я уточню, насколько это возможно. Спасибо за терпение. –
Вам необходимо «получить» соединение по каждому запросу. получение соединения за пределами создания для конкретного пользователя не имеет смысла, поскольку многие пользователи, использующие это приложение, будут использовать тот же самый файл одновременно. –