Meteor-check()与新的SimpleSchema()进行比较,以验证.publish()参数



要确保发布收到的参数类型,我应该使用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);
  [...]
});

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将拒绝不属于的部分。

要检查publish()函数或Meteor.method()的参数,请使用check()。定义SimpleSchema以验证集合的插入、追加和更新。出版物不是这样的——它是只读的。将SimpleSchema.validate()内联使用实际上是可行的,但这是一种非常不寻常的模式,而且有点过头了。

你可能会觉得这很有帮助。

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

Michel Floyd的回答让我意识到check()实际上向客户端发送了Meteor.Error(400, "Match Failed"),而Methods中的SimpleSchema发送了详细的ValidationError,例如可以在表单上显示适当的错误消息。

因此,为了回答这个问题:我们应该使用check()还是SimpleSchema()来评估Meteor中的论点类型,我相信答案是:

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

最新更新