Mongoose 数据校验

什么是mongoose数据校验

用户通过mongoose给mongodb数据库增加数据的时候,对数据的合法性进行的验证

mongoose里面定义Schema:字段类型,修饰符、默认参数 、数据校验都是为了数据库数据的一致性

Schema,为数据库对象的集合,每个schema会映射到mongodb中的一个collection,定义Schema可以理解为表结构的定义

 

 

Mongoose内置的校验参数

代码演示,首先还是有个db.js(用于连接数据库)和users.js(操作users集合的schema模块)还有app.js

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms', { useNewUrlParser: true }, (err) => {
  if(err){
    return console.log(err);
  }
  console.log('数据库连接成功')
});

module.exports = mongoose
let mongoose = require('./db')

let UserSchema = mongoose.Schema({
  name: {
    type: String
  },
  age: {
    type: Number
  },
  status: {
    type: Number,
    default: 1
  }
})


// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');


module.exports = UserModel
let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  age: 23
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

required: 表示这个数据必须传入,可以用在任意类型数据

比如再schema中将name字段设置为required:true,当我添加数据的时候没有name字段就会报错

let mongoose = require('./db')

let UserSchema = mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  age: {
    type: Number
  },
  status: {
    type: Number,
    default: 1
  }
})


// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');


module.exports = UserModel
let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  age: 23
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  name: '王五',
  age: 23
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

max: 用于 Number 类型数据,最大值

比如将age的max设置为100,当我增加数据的时候,如果status的字段大于100就会报错(添加不成功),如果小于等于100就可以添加成功

min: 用于 Number 类型数据,最小值

比如将age的max设置0,当我增加数据的时候,如果status的字段小于0就会报错(添加不成功),如果大于等于0就可以添加成功

let mongoose = require('./db')

let UserSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
    maxlength: 10
  },
  age: {
    type: Number,
    max: 100,
    min: 0
  },
  status: {
    type: Number,
    default: 1
  }
})


// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');


module.exports = UserModel
let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  name: '王五',
  age: 101
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

当新增一个数据age字段大于100,报错了

enum:枚举类型,要求数据必须满足枚举值 enum:['0','1','2'],必须用在String的数据类型中

比如:新增数据的时候status字段的值必须是[0,1,2]中的其中一个

let mongoose = require('./db')

let UserSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
    maxlength: 10
  },
  age: {
    type: Number,
    max: 100,
    min: 0
  },
  status: {
    type: String,
    default: '1',
    enum: ['0', '1', '2']
  }
})


// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');


module.exports = UserModel
let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  name: '王五',
  age: 100,
  status: '4'
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

match:增加的数据必须符合 match(正则)的规则,适用于String类型

表示增加的数据必须满足这个正则才会添加成功,比如必须是合法的手机号码

let mongoose = require('./db')

let UserSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
    maxlength: 10
  },
  age: {
    type: Number,
    max: 100,
    min: 0
  },
  status: {
    type: String,
    default: '1',
    enum: ['0', '1', '2']
  },
  phone:{
    type: String,
    match: /^1[3|4|5|7|8][0-9]\d{8}$/
  }
})


// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');


module.exports = UserModel

当我新增一条数据phone字段是一个合法的手机号码,结果显示添加成功,并且将我数据的手机号码是Number类型自动转成String类型

let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  name: '王五',
  age: 100,
  status: '2',
  phone: 13824360121
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

当我新增一条数据phone字段不是合法的手机号码,就报错了

let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  name: '王五',
  age: 100,
  status: '2',
  phone: 138243601211
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

maxlength:最大长度

minlength:最小长度

 

 

 

Mongoose 自定义的验证器

Mongoose中除了内置的校验参数,还可以自定义校验,使用validate来定义一个方法校验,如果通过验证返回 true,并且新增成功,没有通过则返回 false,新增失败

需求:定义一个字段desc,长度必须大于或等于10(数据类型可以是String和Number)

let mongoose = require('./db')

let UserSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
    maxlength: 10
  },
  age: {
    type: Number,
    max: 100,
    min: 0
  },
  status: {
    type: String,
    default: '1',
    enum: ['0', '1', '2']
  },
  phone:{
    type: String,
    match: /^1[3|4|5|7|8][0-9]\d{8}$/
  },
  desc:{
    type:String,
    validate: (desc) => {
      return desc.length >= 10;
    }
  }
})


// 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users');


module.exports = UserModel

当我新增数据的时候,desc如果长度小于10就会报错

let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  name: '王五',
  age: 100,
  status: '2',
  phone: 13824360121,
  desc: '123'
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

当我新增一个长度大于或者等于10的数据就成功了

let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
  name: '王五',
  age: 100,
  status: '2',
  phone: 13824360121,
  desc: 1234567890
})
u.save((err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('增加数据成功')

  // 查询users表的数据
  UserModel.find({}, (err, doc) => {
    if (err) {
      console.log(err)
      return
    }
    console.log(doc)
  })
})

 

posted @ 2019-05-16 22:12  胡椒粉hjf  阅读(476)  评论(0编辑  收藏  举报