2015-07-13 6 views
1

Я использую publish-composite для выполнения реактивного соединения (я уверен, что конкретный пакет не имеет значения). И я вижу, что промежуточные данные передаются клиенту.Метеор: реактивные соединения предоставляют промежуточные данные

В следующем примере:

Meteor.publishComposite('messages', function(userId) { 
    return { 
    find: function() { 
     return Meteor.users.find(
     { 'profile.connections.$': userId } 
    ); 
    }, 
    children: [{ 
     find: function(user) { 
     return Messages.find({author: user._id}); 
     } 
    }] 
    } 
}); 

Все пользователи, которые имеет USERID в profile.connections получить подвергаются клиенту. Я знаю, что это может создать проекцию mongodb, поэтому чувствительный материал не отображается. Но мне было интересно, могу ли я просто запретить первому поиску курсора find() получить доступ к клиенту вообще.

ответ

0

Вы пытаетесь публиковать сообщения только для конкретного пользователя, если этот пользователь является соединением с вошедшим в систему пользователем? Если это так, возможно, что-то подобное будет работать:

Meteor.publishComposite('messages', function(userId) { 
    return { 
    find: function() { 
     return Meteor.users.find(this.userId); 
    }, 
    children: [{ 
     find: function(user) { 
     return Meteor.users.find(
      { 'profile.connections.$': userid } 
     ); 
     }, 
     children: [{ 
     find: function(connection, user) { 
      return Messages.find({author: connection._id}); 
     } 
     }] 
    }] 
    }; 
}); 

Это было бы эквивалентно что-то вроде:

Meteor.publish('message',function(userId) { 
    var user = Meteor.users.find({_id : this.userId, 'profile.connections.$' : userId}); 

    if (!!user) { 
    return Messages.find({author: userId}); 
    } 

    this.ready(); 
}); 
+0

Спасибо за решение. Это довольно близко, я делал то же самое, что вы предложили. Но проблема в том, что если вы создадите новое соединение, сообщения из этого нового соединения не появятся, если вы не обновите. –

+0

Я думал, что вам нужны только сообщения из одного отображаемого соединения. Итак, вы хотите показывать сообщения со всех подключений пользователя? – bluebird

Смежные вопросы