【问题标题】:meteor allow Collection.insert only if specific Session/Sessions are not false仅当特定 Session/Sessions 不为 false 时,meteor 才允许 Collection.insert
【发布时间】:2013-10-24 16:21:48
【问题描述】:

我得到了这些会话:

Session.set("group_name",false);
Session.set("group_date",false);
Session.set("group_friends",false);
Session.set("group_location",false);
Session.set("group_rules",false);
Session.set("group_desc",false);
Session.set("group_save",false);

我希望用户只有在所有 Session 的值都不是 false 并且该值有效时才能插入, 例如组名不能是“123”或“a”(我知道我可以使用正则表达式,但我更喜欢使用流星检查和匹配)。

在做:

       if(Session.get("group_date") != false && Session.get("group_friends") != false && ...){
CollectionName.insert({name:Session.get("group_name")},...)
    }

似乎乏味且错误。

【问题讨论】:

    标签: javascript session collections meteor


    【解决方案1】:

    为什么不只创建一个 Session var 而不是 7 个:

    Session.set("group", {
        name: false,
        date: false
        //etc...
    })
    

    如果您需要更新其中任何一个:

    var group = Session.get("group");
    group.name = "Bob";
    Session.set("group", group);
    

    现在在您的方法中,您可以使用 for(key in Session.get("group")) 迭代属性,或者只使用 Meteor 内置的 Underscore:

    var group = Session.get("group");
    if(_.all(group, function(val) { return !!val; }){ //checks that all properties of group are not false
        CollectionName.insert({name:Session.get("group_name")},...)
    }
    

    显然,如果您需要应用更复杂的验证而不是简单地检查值是否为假,那么您必须在每个数据字段的基础上进行,绝对没有其他方法。例如:

    var group = Session.get("group");
    
    check(group, validateGroup);
    
    CollectionName.insert({name:Session.get("group_name")},...)
    
    function validateGroup(group){
        check(group, {
            name: String,
            date: Date
            //etc.
        }
    
        if(group.name.length < 3 || group.name == "whatever else you need to compare it to"){
        return false;
    }
     //further validation...
    

    在此处了解更多信息:http://docs.meteor.com/#matchpatterns

    【讨论】:

    • 起初我以为有一个包含 7 个属性(键值对)的 Session,但做其中的 7 个似乎更合适。我对下划线不太熟悉,所以我想我会借用你的 _.all 例子。不幸的是,我还发现流星附带的验证系统几乎没用
    • 是的,7 个单独的会话变量可能更合适,在这种情况下,您必须做几乎您在问题中发布的内容(“乏味和错误”块)。为什么你认为 Meteor 的验证没用?从来没有自己使用它,因为它是一个相当新的添加,但它看起来很简单,甚至很整洁..
    • 我只是希望验证系统有更多的方法来进行真正的验证,因为它很常见,例如验证电子邮件的六位数密码等等,而不是像字符串布尔值这样的一般东西等等。
    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2017-04-02
    • 2014-07-14
    • 2022-01-11
    • 1970-01-01
    • 2018-07-13
    • 2020-09-02
    相关资源
    最近更新 更多