【问题标题】:Meteor - check() VS new SimpleSchema() for verifying .publish() argumentsMeteor - check() VS new SimpleSchema() 用于验证 .publish() 参数
【发布时间】:2016-08-23 04:38:00
【问题描述】:

为确保我的出版物收到的参数类型,我应该使用 SimpleSchema 还是 check()

Meteor.publish('todos.inList', function(listId, limit) {
  new SimpleSchema({
    listId: { type: String },
    limit: { type: Number }
  }).validate({ listId, limit });

  [...]
});

Meteor.publish('todos.inList', function(listId, limit) {
  check(listId, String);
  check (limit, Number);

  [...]
});

【问题讨论】:

  • 好的,但指南的相当一部分另有说明
  • 我对解析为方法和发布的所有参数进行检查,然后通过 collection2 对所有数据库操作进行简单模式。两者都在我的书中占有一席之地。

标签: meteor simple-schema


【解决方案1】:

check() 允许您检查数据type,这是一回事,但有一定的限制。

SimpleSchema 更强大,因为它检查文档中的所有键(而不是一次一个),让您不仅可以定义 type,还可以定义允许值,在不存在时定义默认(或动态)值.

你应该这样使用 SimpleSchema:

mySchema = new SimpleSchema({ <your schema here>});

var MyCollection = new Mongo.Collection("my_collection");
MyCollection.attachSchema(mySchema);

这样,您就不需要在方法中检查架构:它会自动完成。 当然,使用

mySchema.validate(document);

在将客户端生成的文档插入您的集合之前对其进行验证,但如果您不这样做并且您的文档与架构不匹配(额外的键、错误的类型等...) SimpleSchema 将拒绝不匹配的部分t 属于。

【讨论】:

【解决方案2】:

要检查publish() 函数或Meteor.method() 的参数,请使用check()。您定义一个SimpleSchema 来验证对集合的插入、更新插入和更新。出版物不是这些——它是只读的。您将 SimpleSchema.validate() 内联使用实际上会起作用,但这是一种非常不寻常的模式,而且有点矫枉过正。

您可能会发现this 很有帮助。

【讨论】:

  • 感谢您抽出宝贵时间进行编辑和回答。我相信我现在了解SimpleSchema() 对参数验证的用处。
【解决方案3】:

CHECK 是一个用于参数检查和一般模式匹配的轻量级包。其中 SimpleSchema 是一个具有 check 功能之一的巨大包。只是一个包装先于另一个包装。 两者的工作原理相同。您也可以在 Meteor.methods 中外部使用 CHECK。决定权在你。

【讨论】:

    【解决方案4】:

    米歇尔弗洛伊德的回答,让我意识到check() 实际上将Meteor.Error(400, "Match Failed") 发送给客户端,而Methods 中的SimpleSchema 发送详细的ValidationError 例如,可以对to display appropriate error messages on a form 采取行动。

    所以要回答这个问题:我们应该使用check() 还是SimpleSchema() 来评估我们在 Meteor 中的参数类型,我相信答案是:

    如果您需要来自客户端的详细错误报告,请使用SimpleSchema,否则check() 是不发回关键信息的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-08
      • 2017-02-28
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多