我在客户端上有这个代码:
var Checklist = {
title: this.title,
belongs_to: this.belongs_to,
type: this.type,
items: this.items
};
Meteor.call(
'create_checklist',
Checklist,
function(error,result){
console.log('error',error,'result',result);
// if(!error) {
// Router.go('/checklist/'+response);
// }
}
);
这在服务器上:
create_checklist: function(Checklist) {
Checklists.insert(
{
title: Checklist.title,
belongs_to: Checklist.belongs_to,
type: Checklist.type,
items: Checklist.items
}, function(error,id){
console.log(error,id);
if(id) {
return id;
} else {
return error;
}
}
);
},
在创建核对表时,Meteor.call会将信息成功传递给服务器。我可以在服务器控制台中看到新核对表的ID。但是,客户端只会看到undefined
错误和结果。
答案 0 :(得分:5)
您不会在服务器方法中返回结果。您无法从回调中返回值。返回Checklists.insert的结果:
create_checklist: function(Checklist) {
return Checklists.insert(
{
title: Checklist.title,
belongs_to: Checklist.belongs_to,
type: Checklist.type,
items: Checklist.items
}, function(error,id){
console.log(error,id);
if(id) {
return id;
} else {
return error;
}
}
);
},
根据Meteor docs, insert 方法返回插入文档的ID。
在服务器上,如果您不提供回调,则插入块直到数据库确认写入,或者如果出现错误则抛出异常。
答案 1 :(得分:1)
你不需要返回任何东西,将流星方法更改为此。
create_checklist: function(Checklist) {
Checklists.insert(
{
title: Checklist.title,
belongs_to: Checklist.belongs_to,
type: Checklist.type,
items: Checklist.items
}
);
}
meteor.call callback
知道如何处理服务器响应这就是你使用error result
的原因,如果方法出错会导致服务器抛出错误并且流星调用将失败。
答案 2 :(得分:0)
简化到最低限度:
create_checklist: function(Checklist) {
return Checklists.insert(Checklist);
}
您的客户端代码应在_id
result
我不得不问,为什么?如果集合已发布,您应该能够在客户端上执行var id = Checklists.insert(Checklist)
,并让Meteor处理与服务器的同步。 Checklists
是否未发布给客户?