【发布时间】:2015-06-28 19:13:17
【问题描述】:
我有一个方法,它会引发错误,因此我可以在我的事件中捕获它并将其显示给用户,如下所示:
Meteor.methods({
addPlayer: function(nickname) {
if (nickname == "") {
throw new Meteor.Error('empty-nickname', 'You must choose a nickname');
} else {
Player.insert({
nickname: nickname,
});
}
},
})
在我的事件中
'submit form': function (e) {
e.preventDefault();
var nickname = $('input').val();
Meteor.call('addPlayer', nickname, function(error, result) {
if (error) {
console.log(typeof error);
console.log(error);
}
});
}
但是,meteor 在模拟调用'addPlayer'的效果时仍然会抛出异常,并且错误变量不是错误对象,而是与控制台日志具有相同消息的字符串,所以我在控制台中收到了两个错误而不是错误对象。
在 try/catch 中包装 method.call 不起作用。
我在这里错过了什么?
-- 编辑 这是结果的打印屏幕:
完整分辨率的图片链接:http://i.stack.imgur.com/zABar.png
【问题讨论】:
-
代码对我来说似乎是正确的。 “模拟调用'addPlayer'的效果”是什么意思?你的调用方式与代码中显示的不同吗?
-
你在哪里定义方法?在服务器和客户端(存根)上还是仅在服务器上? (“如果存根抛出异常,它将被记录到控制台。”)
-
throw new Meteor.Error(..) 看起来不对。它应该包含一个错误号。
-
抛出错误没有帮助。该方法同时为服务器和客户端定义,并由客户端在表单提交事件中调用。
-
只在服务器上抛出错误。把它包裹在
if(!this.isSimulation) {}里面
标签: meteor