【问题标题】:Meteor: Customizing errors messages from allow and deny rulesMeteor:自定义来自允许和拒绝规则的错误消息
【发布时间】:2013-07-10 13:12:54
【问题描述】:

我希望将 Meteor 中允许和拒绝规则中的错误消息标准化。而不是在客户端的回调中定义错误,我希望服务器以正确的错误消息进行响应,这样我只需要定义一次。来自允许/拒绝的文档:

如果函数认为应该允许该操作,则它们应该返回 true。否则它们应该返回 false,或者什么都不返回(未定义)。

但是,如果我在拒绝函数中抛出错误,则会将错误发送给用户。 IE。否认:

throw new Meteor.Error(404, "Not the owner");

在客户端:

SomeCollection.remove(someId, function(err, result) {
  console.log(err.message); // Outputs "Not the owner"
});

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

【问题讨论】:

  • 附带说明:您发送的 HTTP 错误代码应该是 403 (“forbidden”) 而不是 404(“未找到”);)

标签: meteor


【解决方案1】:

来自文档的这一部分:

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 不应该永远不允许用户出现这样的消息吗?除了“糟糕,你不应该被允许这样做。恢复你的行为。”以防意外允许未经授权的查询通过的错误。

【讨论】:

  • 这是一个有效的问题。我希望能够给用户一些额外的反馈。例如,插入或更新可能会被禁止,因为名称字段验证了唯一约束,或者在插入评论后超过 15 分钟无法更新评论或其他原因。用户必须采取的操作取决于导致错误的原因。能够将所有这些逻辑放在一个地方并以引导用户的消息进行响应将非常简洁。
【解决方案2】:

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

例子:

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

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

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

拒绝 1

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

【讨论】:

  • 不,allow 规则定义为 per modification typeinsertupdateremove)。由于修改只能是一种类型,因此无法检查多个 allow 规则。
  • @MattiSG 这是错误的。来自文档“您可以根据需要多次调用允许,并且每次调用都可以包含插入、更新和删除函数的任意组合。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 2018-11-30
  • 2012-03-24
  • 2015-08-24
  • 2015-09-07
  • 1970-01-01
相关资源
最近更新 更多