我希望通过Meteor中的允许和拒绝规则来标准化错误消息。我不想在客户端上定义回调中的错误,而是希望服务器使用正确的错误消息进行响应,这样我只需要定义一次。来自关于允许/拒绝的文档:
如果他们认为应允许操作,则函数应返回true。否则他们应该返回false,或者根本不返回任何内容(未定义)。
但是,如果我在拒绝功能中抛出错误,则错误会被发送给用户。即否认:
throw new Meteor.Error(404, "Not the owner");
并在客户端:
SomeCollection.remove(someId, function(err, result) {
console.log(err.message); // Outputs "Not the owner"
});
似乎是一种在整个网站上显示相同错误的简单方法。这是一种有效的方法,即使文档明确指出我们应该在拒绝/允许中返回true / false吗?
答案 0 :(得分:3)
从这部分文档:
http://docs.meteor.com/#meteor_error
前三句:
If you want to return an error from a method, throw an exception. Methods can throw any kind of exception. But Meteor.Error is the only kind of error that a server will send to the client.
听起来像你做得对。我不得不怀疑,你的用户界面是否永远不允许用户出现这样的消息?除了“哎呀,你不应该被允许这样做。恢复你的行动。”如果出现意外允许未经授权的查询的错误。
答案 1 :(得分:1)
您不能在Meteor允许/拒绝回调中抛出异常。这样做将打破Meteor将检查的回调链,以确保文档的操作通过。
示例:
Meteor将通过AT LEAST ONE检查允许规则,只要1返回true,操作就会成功。
允许1 - >允许2 - >允许3
Meteor还会检查所有拒绝规则,只要1返回true,操作就会失败
拒绝1
如果在Allow 1上抛出异常而不是返回false(如果不允许用户执行某些操作则应该如此),Meteor永远不会检查Allow 2和3,即使它们将返回true。这样就打破了链条。