Mongoose指南 - 验证

开始前记住下面几点

  • 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

  

时间: 2024-10-04 01:41:23

Mongoose指南 - 验证的相关文章

Mongoose指南 - Connection

使用mongoose.connect()方法创建连接 mongoose.conect('mongodb://localhost/myapp'); 上面的代码是通过默认端口27017链接到mongodb的myapp数据库.我们还可以给url设定一些特定的参数: mongoose.conect('mongodb://username:[email protected]:port/databasename?options...'); Options connect方法可以接受一个options对象 m

Mongoose指南 - Population

MongoDB没有join, 但是有的时候我们需要引用其它collection的documents, 这个时候就需要populate了. 我们可以populate单个document, 多个document, plain object, multiple plain objects或query返回的全部object. var mongoose = require('mongoose'); var Schema = mongoose.Schema; var personSchema = new S

Mongoose指南 - Schema

定义schema 用mongoose的第一件事情就应该是定义schema. schema是什么呢? 它类似于关系数据库的表结构. var mongoose = require('mongoose'); var schema = mongoose.Schema; var blogSchema = new Schema({ titile: String, body: String, comments: [{body: String, date: Date}], date: {type: Date,

Mongoose指南 - Model

编译你的第一个model var xxSchema = new Schema({name: 'string', size: 'string'}); var Tank = mongoose.model('Tank', schema); 构造document document是model的实例. 创建更新document到数据很容易 var Tank = mongoose.model('Tank', tankSchema); var small = new Tank({size:'small'});

Mongoose指南 - 查询

查询有带callback和不带callback两种方式 所有mongoose的callback都是这种格式: callback(err, result) var Person = mongoose.model('Person', yourSchema); Person.findOne({'name.last':'Ghost'}, 'name occupation', function(err, person){ if(err) return handleError(err); console.l

Mongoose指南 - Document

更新 有几种方式更新document. 先看一下传统的更新方法 Tank.findById(id, function(err, tank){ if(err) return handleError(err); tank.size = "large"; tank.save(function(err){ if(err) return handleError(err); res.send(tank); }); }); 上面的代码是先查找出一个dociment然后在更新. 如果我们不想查找doc

Mongoose指南 - Plugin

Schema支持插件, 这样你就可以扩展一些额功能了 下面的例子是当document save的时候自定更新最后修改日期的出插件 // lastMod.js module.exports = exports = function lastModifiedPlugin (schema, options) { schema.add({ lastMod: Date }) schema.pre('save', function (next) { this.lastMod = new Date next(

Ripple(瑞波币)validator-keys-tool 配置验证器

目录 Ripple(瑞波币)validator-keys-tool配置验证器 验证器密钥工具指南 验证器密钥 验证器令牌(Validator Keys) public_key撤销 签名 Ripple(瑞波币)validator-keys-tool配置验证器 验证器密钥工具指南 本指南介绍了如何设置validator,以便在rippled.conf 或服务器受到威胁时不必更改其公钥. 一个validator使用一对公钥/私钥.validator由公钥标识.应严保管私钥.它用于: 签署令牌,ripp

前端js插件

jquery jquery官方 版本:v 2.1.0v 1.11.0 yquery 暂停更新 版本: v 1.6v 1.5 v 1.4v 1.3 v 1.2v 1.1 v 1.0 jQuery 原型插件(jquery-*) jquery-drag 版本: latestv 1.1 v 1.0 jquery-dialog 版本: latestv 1.5 v 1.4v 1.3 v 1.2v 1.1 v 1.0 样式:default jquery-scrollable 版本: latestv 1.0 j