次のユースケースがあります。
- フロントエンドとは別のサービスであるバックエンドの MongoDB に users テーブルがあります。DDP.connect() を使用して、このバックエンド サービスに接続します。
- 各ユーザーには一連の「サブジェクト」があります
users テーブルの各サブジェクトは、名前ではなく ID で参照されます。主題を ID で保持する「subjects」と呼ばれる別のテーブルがあります。
ユーザーをクライアントに公開したいのですが、公開されたユーザーに最初にサブジェクトを入力したいと考えています。
このブログ投稿に触発されて、次のことを試しました。
// 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
。エラーは発生しませんが、クライアントの minimongo に変更が反映されていませpopulate
んconsole.log(user)
。