orm2 中文文档 3.2 模型验证器
译者:飞龙
来源: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 模型验证器相关推荐
- orm2 中文文档 3. 定义模型
译者:飞龙 来源:Defining Models 在[连接](1. Connecting to Database.md)之后,你可以使用连接对象(db)来定义你的模型.你需要指定模型的名称,一个用于描 ...
- orm2 中文文档 3.3 模型钩子
译者:飞龙 来源:Model Hooks 如果你想要监听发生在模型实例上的事件,你可以附带一个函数,它会在发生时调用. 现在支持下面这些事件: afterLoad:(无参数)加载和准备所用实例之后: ...
- orm2 中文文档 3.1 模型属性
译者:飞龙 来源:Model Properties 模型和一些关联具有一个或多个属性,每个属性有类型以及一些可选设置,你可以自行选择它们(或使用默认设置). 类型 受支持的类型是: text:文本字符 ...
- PyTorch官方中文文档:torch.optim 优化器参数
内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...
- orm2 中文文档 5. 同步和删除模型
译者:飞龙 来源:Syncing and dropping models 同步是一项功能方法,可以在数据库里为你的模型和关联创建所需的表来工作.现存的表并不会被替换,它们只会在不存在的时候被创建. 同 ...
- orm2 中文文档 8. 聚合
译者:飞龙 来源:Aggregation 如果你需要从一个模型中获取一些聚合值,你可以使用Model.aggregate().下面通过一个例子来展示: Person.aggregate({ surna ...
- orm2 中文文档 4.3 extendsTo(一对一关系)
译者:飞龙 来源:extendsTo 你可能想把可选的属性分割到另一个表中.每个扩展都会是一个新的表,其中每一行的唯一标识符是主模型实例的id. 例如: var Person = db.define( ...
- orm2 中文文档 4.2 hasMany(多对多关系)
译者:飞龙 来源:hasMany hasMany 是多对多的关系(包括连接表). 例如:Patient.hasMany('doctors', Doctor, { why: String }, { re ...
- orm2 中文文档 4.1 hasOne(多对一关系)
译者:飞龙 来源:hasOne hasOne关联是一种多对一的关系,意思是你定义的模型可以有多个实例指向一个其它的实例(所属相同模型或不同模型). 用法 Animal.hasOne(associati ...
最新文章
- springMVC swagger2
- Linux 下 PHP 5.2.x 连接 SQL Server 数据库 FreeTDS 配置笔记
- 写入缓存策略无法更改_【第1747期】webpack 5 之持久化缓存指南
- 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.17 技巧:使用多个列
- asp无组件上传图片 动态保存文件名 upload.inc逐句翻译
- 详解vue动画的封装
- vue、react隐式实例化
- flex 3 学习小结2
- Arduino驱动MAX30102踩坑记
- Word另存为PDF后无导航栏解决办法
- 瀚高数据库块恢复示例
- Centos7 安装奔跑的小火车
- URAL1389. Roadworks(dp)
- 【目标检测】(10) Mosaic 数据增强方法,附Python完整代码
- android api版本修改,Android 版seesmic修改API方法
- 【养生之道】男人养生的秘诀
- Python使用RMF聚类分析客户价值
- 学习图神经网络相关内容
- SKR!虎扑66万JRS大战3300万吴亦凡护卫队,别逼我拿Python
- vs调试nuget包_高冷?孩子气?醋包?那不得是分对象啊
热门文章
- linux批量执行一个脚本文件,shell脚本示例:批量比较多个文件的内容是否相同...
- pcb封装lib文件转pads_想做PCB达人?掌握这些PCB主流软件很关键!
- 【嵌入式Linux】嵌入式Linux应用开发基础知识之多线程编程
- html文本框最小数字,HTML5中的数字类型的输入框:数字选择器
- mysql+主从同步+用户,MySQL主从同步
- 【主动声呐】——匹配滤波器
- 数据结构之二叉树的创建
- linux下的进程信号,信号注册、处理方式、注销,信号阻塞及volatile代码优化
- 用户借助操作系统使用计算机,计算机操作系统试题_B试卷及答案(08-09)
- zuul网关找不到服务_网关zuul中对所有下游服务权限做控制zuulauth