要确保发布收到的参数类型,我应该使用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()
是不发回关键信息的方法