试图理解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);
});
}
});
答案 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);
}
});