Коллекции метеоров на стороне сервера не видны на стороне клиента.

У меня есть коллекции, которые публикуются на стороне сервера, и я использую waitOn железного маршрутизатора для подписки на эти коллекции. Однако на стороне клиента я никогда не вижу ссылок на коллекции, определенные на стороне сервера. Единственный способ получить к ним доступ — определить коллекцию на стороне клиента (devices = new Meteor.Collection('devices')), но я не вижу, чтобы кто-то делал это в своих онлайн-примерах. Вот код:

Код клиента:

Router.route('/devices', {
    waitOn: function() {
        return [
            Meteor.subscribe('devices', Meteor.user()._id),
        ];
    },
    action: function() {
        this.render();
    }
});

Сторона сервера:

Devices = new Mongo.Collection("devices");
Devices.allow({
    'insert': function (userId, doc) {
        if (userId === doc.accountId) {
            return true;
        }
        return false;
    },
    'update': function (userId, doc) {
        if (userId === doc.accountId) {
            return true;
        }
        return false;
    },
});
Meteor.publish('devices', function(id) {
    return Devices.find({accountId: id});
});

Я удалил автопубликацию, и из примеров в Интернете я должен просто ссылаться на Devices.find({}). Вместо этого я должен использовать devices = new Meteor.Collection('devices') , что затем вызывает проблемы, поскольку, если я вызову это снова, он скажет, что у меня уже есть коллекция с именем devices. Кто-нибудь знает, почему я не могу ссылаться на устройства?


person Brett McLain    schedule 14.09.2015    source источник
comment
devices = new Meteor.Collection('devices') создаст коллекцию MongoDB, называемую устройствами на сервере; на клиенте это создает кеш, подключенный к серверу. devices = new Meteor.Collection(null) создаст коллекцию на стороне клиента.   -  person MichelH    schedule 14.09.2015


Ответы (1)


Причина, по которой вы не можете ссылаться на нее на стороне клиента, заключается в том, что вы не сделали коллекцию доступной для клиента.

Оставьте методы .allow и .publish на стороне сервера, но переместите создание коллекции в папку lib, чтобы сделать ее доступной как на клиенте, так и на сервере.

/lib/коллекции.js:

Devices = new Mongo.Collection("devices");
person Mark Leiber    schedule 14.09.2015