服务器端流星 collections 在客户端不可见

Server side meteor collections aren't visible on client side

我有collection在服务器端发布,使用iron router的waitOn订阅这些collection。但是,在客户端,我永远看不到对服务器端定义的 collection 的任何引用。我可以访问它们的唯一方法是在客户端定义 collection (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') 这会导致问题,因为如果我再次调用它,它会说我已经有一个 collection 调用的设备。有谁知道为什么我不能引用设备?

您不能在客户端引用它的原因是您没有将集合提供给客户端。

在服务器端保留 .allow.publish 方法,但将您的集合创建移动到 lib 文件夹以使其在客户端和服务器上都可用。

/lib/collections.js:

Devices = new Mongo.Collection("devices");