У меня есть следующий случай использования:Изменить данные в Meteor.publish перед отправкой вниз к клиенту
- У меня есть таблица пользователей в MongoDB на внутреннем интерфейсе, который является отдельной службой, чем внешний интерфейс. Я использую DDP.connect() для подключения к этой серверной службе.
- У каждого пользователя есть набор «предметов»
В каждом объекте в таблице users указан идентификатор, а не имя. Существует отдельная таблица под названием «субъекты», в которой субъекты имеют идентификатор.
Я хочу опубликовать пользователя до клиента, однако Я хочу, чтобы опубликованный пользователь сначала был заполнен предметами.
Я попытался следующие, вдохновленный this blog post:
// in the backend service on port 3030
Meteor.publish('users', function(userId) {
var _this = this;
Meteor.users.find({
_id: userId
}).forEach(function(user) {
user.profile = populate(user.profile);
console.log(user);
_this.changed('users', userId, {
_id: userId,
profile: user.profile
});
});
_this.ready();
});
// in the client
var UserService = DDP.connect('http://localhost:3030');
var UserServiceProfile = UserService.subscribe('users', Meteor.userId());
console.log(UserServiceProfile);
Это дает следующее сообщение об ошибке на внутреннем интерфейсе:
Exception from sub users id akuWx5TqsrArFnQBZ Error: Could not find element with id XhQu77F5ChjcMTSPr to change
.
Поэтому я попытался изменить _this.changed
на _this.added
. Я не получаю никаких ошибок, но изменения не отображаются в минимальном клиенте клиента, хотя я вижу, что функция populate
работает через линию console.log(user)
.