Meteor.js:Collection.insert适用于服务器,但不适用于客户端

时间:2014-12-05 21:23:34

标签: meteor

试图理解Meteor&中的CRUD。有一个基本的问题,就是当我删除自动发布并使用显式的pub / sub时,来自客户端的集合插入更新服务器而不是客户端集合。

结果是,在正确获取字段值的同时,插入在客户端失败。在服务器端,正确插入记录。

$ meteor删除自动发布

创建HTML表单文件(它有效并按预期运行),然后:

文件/server/publish.js:

Meteor.publish('todos'), function() {
    return Todos.find();
}

文件/lib/collections.js:

Todos = new Mongo.Collection('todos');

文件/client/subscribe.js:

Meteor.subscribe('todos');

文件/client/todos.js:

Template.todosList.helpers({
    todosList: function() {
        return Todos.find();
    },
  });

Template.todoNew.events({
    'submit form': function(event) {
        event.preventDefault();
        var theRecord = {
            description: $(event.target).find('[id=description]').val(),
            priority: $(event.target).find('[id=priority]').val()
        };
        // Display correct field values, so form data is OK
        console.log('Attemping to insert: ' + theRecord.description);
        Todos.insert(theRecord, function(error) {
            // This error always occurs
            console.log('error inserting: ' + theRecord.description);
        });
    }
});

1 个答案:

答案 0 :(得分:1)

要从客户端写入集合,您需要allow规则。在/server下面加上这样的内容:

Meteor.publish('todos', function() {
  return Todos.find();
});

Todos.allow({
  insert: function(userId, doc) {
    // a todo must have a description and a priority
    return (doc.description && doc.priority);
  }
});