开始前记住下面几点

  • Validation定义在SchemaType中
  • Validation是一个内部的中间件
  • 当document要save前会发生验证
  • 验证不会发生在空值上 除非对应的字段加上了 required validator
  • 可以自定义验证器

内置的验证器

  • 所有的SchemaType都有required验证器
  • Number有min和max验证器
  • String有enum和match验证器

自定义验证器

//确保值是something
function validator(val){
return val == "something";
}
new Schema({name:{type:String, validate: validator}}); //自定义错误信息
var custom =[validator, '{PATH} does not equal something'];
new Schema({name:{type:String, validate: custome}}); //一次添加多个验证器
var many = [
{validator:validator, msg:'uh oh'},
{validator: anotherValidator, msg: 'failed'}
];
new Schema({name: {type:String, validate:many}); //or
var schema = new Schema({name: 'string'});
schema.path('name').validate(validator, "{PATH} {VALUE}");

  

var toySchema = new Schema({
color: String,
name: String
}); var Toy = mongoose.model('Toy', toySchema); Toy.schema.path('color').validate(function (value) {
return /blue|green|white|red|orange|periwinkle/i.test(value);
}, 'Invalid color'); var toy = new Toy({ color: 'grease'}); toy.save(function (err) {
// err is our ValidationError object
// err.errors.color is a ValidatorError object console.log(err.errors.color.message) // prints 'Validator "Invalid color" failed for path color with value `grease`'
console.log(String(err.errors.color)) // prints 'Validator "Invalid color" failed for path color with value `grease`'
console.log(err.errors.color.type) // prints "Invalid color"
console.log(err.errors.color.path) // prints "color"
console.log(err.errors.color.value) // prints "grease"
console.log(err.name) // prints "ValidationError"
console.log(err.message) // prints "Validation failed"
});

当验证发生错误的时候, document会有一个erros属性:

toy.errors.color.message == err.errors.color.message

  

[译]Mongoose指南 - 验证的更多相关文章

  1. [译]Mongoose指南 - Connection

    使用mongoose.connect()方法创建连接 mongoose.conect('mongodb://localhost/myapp'); 上面的代码是通过默认端口27017链接到mongodb ...

  2. [译]Mongoose指南 - Schema

    定义schema 用mongoose的第一件事情就应该是定义schema. schema是什么呢? 它类似于关系数据库的表结构. var mongoose = require('mongoose'); ...

  3. [译]Mongoose指南 - Population

    MongoDB没有join, 但是有的时候我们需要引用其它collection的documents, 这个时候就需要populate了. 我们可以populate单个document, 多个docum ...

  4. [译]Mongoose指南 - 查询

    查询有带callback和不带callback两种方式 所有mongoose的callback都是这种格式: callback(err, result) var Person = mongoose.m ...

  5. [译]Mongoose指南 - Model

    编译你的第一个model var xxSchema = new Schema({name: 'string', size: 'string'}); var Tank = mongoose.model( ...

  6. [译]Mongoose指南 - Plugin

    Schema支持插件, 这样你就可以扩展一些额功能了 下面的例子是当document save的时候自定更新最后修改日期的出插件 // lastMod.js module.exports = expo ...

  7. [译]Mongoose指南 - 中间件

    中间件是一些函数, 当document发生init, validate, save和remove方法的时候中间件发生. 中间件都是document级别的不是model级别的. 下面讲讲两种中间件pre ...

  8. [译]Mongoose指南 - Document

    更新 有几种方式更新document. 先看一下传统的更新方法 Tank.findById(id, function(err, tank){ if(err) return handleError(er ...

  9. [译]SpringMVC自定义验证注解(SpringMVC custom validation annotations)

    在基于SpringMVC框架的开发中,我们经常要对用户提交的字段进行合法性验证,比如整数类型的字段有个范围约束,我们会用@Range(min=1, max=4).在实际应用开发中,我们经常碰到一些自己 ...

随机推荐

  1. Linux的#和$区别

    [#]代表 root权限[$]代表普通用户 如果更改了/etc/profile , 或~/.bashrc等文档,可以用任何符号来代替它们. linux窗口下的[root@locate~]其中的[~]代 ...

  2. Jenkins邮件扩展插件【Email Extension Plugin】的参数使用

    经过测试,无论在windows还是linux,统一使用参数时,都是按照linux的格式,如:${WORKPASE}

  3. POJ3525 半平面交

    题意:求某凸多边形内部离边界最远的点到边界的距离 首先介绍半平面.半平面交的概念: 半平面:对于一条有向直线,它的方向的左手侧就是它所划定的半平面范围.如图所示: 半平面交:多个半平面的交集.有点类似 ...

  4. [NOIP2015] 提高组 洛谷P2615 神奇的幻方

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  5. dedecms /member/reg_new.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 2. 漏洞触发条件 http://127 ...

  6. ARPSpoofing教程(二) - 获取网络设备中的详细地址信息

    WinPcap中文API  http://www.ferrisxu.com/WinPcap/html/index.html 1: #include"pcap.h" 2: #incl ...

  7. C#中值类型和引用类型图解

    举几个值类型和引用类型的内存配置: 值类型存储在栈中,引用类型堆里: 1,数组 数组是引用类型,但是数组的元素可以是值类型或引用类型 2. 结构 结构是值类型,简略的看个例子 struct sampl ...

  8. redis常用配置

    daemonize yes #是否以后台进程运行,默认为no pidfile /var/run/redis.pid #如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid ...

  9. asp.net json 与xml 的基础事例

    //json序列化和反序列化 using System.Runtime.Serialization.Json; public static string JsonSerializer<T> ...

  10. 数据库SQL语句学习--view

    1.新建一个view create view view_name as select * from table_name where... 2.删除一个view drop view view_name ...