译者:飞龙

来源: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 defaultage  : [ 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"});
});

orm2 中文文档 3.2 模型验证器相关推荐

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

    译者:飞龙 来源:Defining Models 在[连接](1. Connecting to Database.md)之后,你可以使用连接对象(db)来定义你的模型.你需要指定模型的名称,一个用于描 ...

  2. orm2 中文文档 3.3 模型钩子

    译者:飞龙 来源:Model Hooks 如果你想要监听发生在模型实例上的事件,你可以附带一个函数,它会在发生时调用. 现在支持下面这些事件: afterLoad:(无参数)加载和准备所用实例之后: ...

  3. orm2 中文文档 3.1 模型属性

    译者:飞龙 来源:Model Properties 模型和一些关联具有一个或多个属性,每个属性有类型以及一些可选设置,你可以自行选择它们(或使用默认设置). 类型 受支持的类型是: text:文本字符 ...

  4. PyTorch官方中文文档:torch.optim 优化器参数

    内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...

  5. orm2 中文文档 5. 同步和删除模型

    译者:飞龙 来源:Syncing and dropping models 同步是一项功能方法,可以在数据库里为你的模型和关联创建所需的表来工作.现存的表并不会被替换,它们只会在不存在的时候被创建. 同 ...

  6. orm2 中文文档 8. 聚合

    译者:飞龙 来源:Aggregation 如果你需要从一个模型中获取一些聚合值,你可以使用Model.aggregate().下面通过一个例子来展示: Person.aggregate({ surna ...

  7. orm2 中文文档 4.3 extendsTo(一对一关系)

    译者:飞龙 来源:extendsTo 你可能想把可选的属性分割到另一个表中.每个扩展都会是一个新的表,其中每一行的唯一标识符是主模型实例的id. 例如: var Person = db.define( ...

  8. orm2 中文文档 4.2 hasMany(多对多关系)

    译者:飞龙 来源:hasMany hasMany 是多对多的关系(包括连接表). 例如:Patient.hasMany('doctors', Doctor, { why: String }, { re ...

  9. orm2 中文文档 4.1 hasOne(多对一关系)

    译者:飞龙 来源:hasOne hasOne关联是一种多对一的关系,意思是你定义的模型可以有多个实例指向一个其它的实例(所属相同模型或不同模型). 用法 Animal.hasOne(associati ...

最新文章

  1. springMVC swagger2
  2. Linux 下 PHP 5.2.x 连接 SQL Server 数据库 FreeTDS 配置笔记
  3. 写入缓存策略无法更改_【第1747期】webpack 5 之持久化缓存指南
  4. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.17 技巧:使用多个列
  5. asp无组件上传图片 动态保存文件名 upload.inc逐句翻译
  6. 详解vue动画的封装
  7. vue、react隐式实例化
  8. flex 3 学习小结2
  9. Arduino驱动MAX30102踩坑记
  10. Word另存为PDF后无导航栏解决办法
  11. 瀚高数据库块恢复示例
  12. Centos7 安装奔跑的小火车
  13. URAL1389. Roadworks(dp)
  14. 【目标检测】(10) Mosaic 数据增强方法,附Python完整代码
  15. android api版本修改,Android 版seesmic修改API方法
  16. 【养生之道】男人养生的秘诀
  17. Python使用RMF聚类分析客户价值
  18. 学习图神经网络相关内容
  19. SKR!虎扑66万JRS大战3300万吴亦凡护卫队,别逼我拿Python
  20. vs调试nuget包_高冷?孩子气?醋包?那不得是分对象啊

热门文章

  1. linux批量执行一个脚本文件,shell脚本示例:批量比较多个文件的内容是否相同...
  2. pcb封装lib文件转pads_想做PCB达人?掌握这些PCB主流软件很关键!
  3. 【嵌入式Linux】嵌入式Linux应用开发基础知识之多线程编程
  4. html文本框最小数字,HTML5中的数字类型的输入框:数字选择器
  5. mysql+主从同步+用户,MySQL主从同步
  6. 【主动声呐】——匹配滤波器
  7. 数据结构之二叉树的创建
  8. linux下的进程信号,信号注册、处理方式、注销,信号阻塞及volatile代码优化
  9. 用户借助操作系统使用计算机,计算机操作系统试题_B试卷及答案(08-09)
  10. zuul网关找不到服务_网关zuul中对所有下游服务权限做控制zuulauth