资讯专栏INFORMATION COLUMN

orm2 中文文档 3.2 模型验证器

zhiwei / 1209人阅读

摘要:译者飞龙来源模块用于验证数据。可用的验证器的列表请见。验证器也构建于中,可以这样来访问你可以为模型的每个属性定义验证器。在第一个验证器验证失败之后,验证就停止了。

译者:飞龙

来源:Model Validations

Enforce模块用于验证数据。对于使用以前的验证器的用户,还可以继续使用,它们中的一部分整合到了enforce,剩余部分还没有。推荐你开始使用orm.enforce来取代orm.validators。可用的验证器的列表请见node-enforce。

unique验证器也构建于ORM中,可以这样来访问:

name: orm.enforce.unique("name already taken!")
name: orm.enforce.unique({ scope: ["age"] }, "Sorry, name already taken for this age group")
name: orm.enforce.unique({ ignoreCase: true }) // "John" is same as "john" (mysql is case insensitive by default)

你可以为模型的每个属性定义验证器。对于每个属性,你可以定义一个或多个验证器。你也可以使用预定义的验证器,或者自己新建。

var Person = db.define("person", {
    name : String,
    age  : Number
}, {
    validations : {
        name : orm.enforce.ranges.length(1, undefined, "missing"), // "missing" is a name given to this validation, instead of default
        age  : [ orm.enforce.ranges.number(0, 10), orm.enforce.lists.inside([ 1, 3, 5, 7, 9 ]) ]
    }
});

上面的代码限定了name的长度必须在1和undefined之间(undfined表示任意值),以及age必须在0和10(闭区间)之间,而且是列出的值之一。这个例子或许没有意义,但是足够解释了。

保存一个对象的时候,如果由任何一个验证器验证失败,你都会得到一个带有属性名称和验证错误描述的error对象。这个描述可以帮助你弄清楚发生了什么。

var John = new Person({
    name : "",
    age : 20
});
John.save(function (err) {
    // err.field = "name" , err.value = "" , err.msg = "missing"
});

在第一个验证器验证失败之后,验证就停止了。如果你想要验证每个属性并且返回所有验证错误,你可以在全局或局部设置中更改这一行为:

var orm = require("orm");

orm.settings.set("instance.returnAllErrors", true); // global or..

orm.connect("....", function (err, db) {
    db.settings.set("instance.returnAllErrors", true); // .. local

    // ...

    var John = new Person({
        name : "",
        age : 15
    });
    John.save(function (err) {
        assert(Array.isArray(err));
        // err[0].property = "name" , err[0].value = "" , err[0].msg = "missing"
        // err[1].property = "age"  , err[1].value = 15 , err[1].msg = "out-of-range-number"
        // err[2].property = "age"  , err[2].value = 15 , err[2].msg = "outside-list"
    });
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17507.html

相关文章

  • orm2 中文文档 3. 定义模型

    摘要:译者飞龙来源在连接之后,你可以使用连接对象来定义你的模型。你需要指定模型的名称,一个用于描述的属性和一些可选的选项。在这个例子中,有个模型方法叫做。接收的第一个对象第二个参数被称为属性对象,它定义了所有的属性。在属性修改时自动保存模型。 译者:飞龙 来源:Defining Models 在连接之后,你可以使用连接对象(db)来定义你的模型。你需要指定模型的名称,一个用于描述的属性和...

    gnehc 评论0 收藏0
  • orm2 中文文档

    摘要:译者飞龙来源安装所支持的版本支持。,和版本的测试在上运行。如果你使用了,你可能想使用这一简单的中间件,使集成变得更容易。在多个连接之间定义的模型会在中连接。不要忘记在之前使用它,最好在你的公共素材文件夹之后。 译者:飞龙 来源:Object Relational Mapping 安装 npm install orm 所支持的Node.js版本 支持 0.8, 0.10, 0.12,...

    flybywind 评论0 收藏0

发表评论

0条评论

zhiwei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<