3

我希望标准化 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"
});

似乎是一种在整个站点上显示相同错误的简单方法。即使文档明确指出我们应该在拒绝/允许中返回真/假,这是一种有效的方法吗?

4

2 回答 2

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. 

在我看来,你做得对。我不得不怀疑,您的 UI 不应该永远不允许用户出现这样的消息吗?除了“糟糕,你不应该被允许这样做。恢复你的行为。” 以防意外允许未经授权的查询通过的错误。

于 2013-07-10T14:30:30.197 回答
1

您不能在 Meteor 允许/拒绝回调中抛出异常。这样做会破坏 Meteor 将检查的回调链,以确保文档的操作通过。

例子:

Meteor 会通过 AT LEAST ONE 规则检查,只要 1 返回 true,则操作成功。

允许 1 -> 允许 2 -> 允许 3

Meteor 也会检查所有的拒绝规则,只要 1 返回 true,则操作失败

拒绝 1

如果在 Allow 1 上抛出异常而不是返回 false(如果不允许用户做某事,则应该如此),Meteor 永远不会检查 Allow 2 和 3,即使它们会返回 true。这样就打破了链条。

于 2014-07-13T05:49:22.730 回答