2016-05-15 67 views
2

为了确保我的出版物接收的参数类型,我应该使用SimpleSchema还是check()流星 - 检查()VS新的SimpleSchema()用于验证.publish()参数

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); 

    [...] 
}); 
+0

肯定检查 – ickyrr

+0

好的,但指南的一个公平部分否则 –

+0

我使用检查解析到方法和发布的所有参数,然后在所有数据库操作上使用简单模式通过collection2。在我的书中都有地方。 – pushplaybang

回答

3

CHECK是一个轻量级包参数检查和一般模式匹配。作为SimpleSchema是一个巨大的包,其中检查功能之一。只是一个包裹是在另一个之前制作的。 两者的工作原理都是一样的。您也可以在Meteor.methods的外部使用CHECK。决定是你的。

5

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

+0

谢谢您的帮助。尽管如此,'Meteor.check()'还允许你[一次检查所有的对象属性](http://docs.meteor.com/#/full/check)。 –

3

检查参数publish()函数或Meteor.method()使用check()。您定义一个SimpleSchema来验证插入,upserts和集合的更新。出版物不是这些 - 它是只读的。你使用SimpleSchema.validate()内联实际上可以工作,但这是一个非常不寻常的模式和一点矫枉过正。

您可能会发现this有帮助。

+0

感谢您花时间编辑和回答。我相信我现在理解了'SimpleSchema()'用于参数验证的有用性。 –

1

米歇尔·弗洛伊德的答案的,让我意识到check()实际发送Meteor.Error(400, "Match Failed")到客户端,而内MethodsSimpleSchema发送详细ValidationError一个例如可以在to display appropriate error messages on a form行动。

因此,要回答这个问题:我们应该使用check()SimpleSchema()评估流星我们的论点类型,我相信答案是:

使用SimpleSchema如果从客户需要的错误的详细报告,否则check()是不发送关键信息的方式。