什么是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)
})
})

Mongoose 数据校验的更多相关文章

  1. Struts2数据校验

    Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...

  2. Spring MVC数据校验

    在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证.输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Jav ...

  3. spring mvc 数据校验

    1.需要导入的jar包: slf4j-api-1.7.21.jar validation-api-1.0.0.GA.jar hibernate-validator-4.0.1.GA.jar 2.访问页 ...

  4. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  5. springmvc的数据校验

       springmvc的数据校验 在Web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对数据进行验证,输入验证分为客户端验证与服务器端验证. 客户端验证主要通过javaScript脚本 ...

  6. Struts 2 数据校验要用到的类和两种校验方式以及一些校验问题的解决

    通过继承ActionSupport类来完成Action开发,ActionSupport类不仅对Action接口进行简单实现, 同时增加了验证.本地化等支持 .真实开发中自定义Action都需要继承该类 ...

  7. Struts 2的数据校验

    既然说到了Struts 2的数据校验,我们该怎么去实现呢?又是通过什么来实现呢? 就让我带着大家一起来走进Struts 2的数据校验吧. 首先我们会想到在Stuts 2的登录案例中我们定义了一个Act ...

  8. 使用Struts2实现数据校验

    使用Struts2实现数据校验 为什么需要数据校验呢?答案很简单,假如当你登录想要京东,这时就需要数据校验了如果不输入用户名的话,那么就不会登陆成功,并且会提示出"请输入用户名"的 ...

  9. WPF使用IDataErrorInfo进行数据校验

    这篇博客将介绍如何使用IDataErrorInfo进行数据校验.下面直接看例子.一个Customer类,两个属性(FirstName, Age) class Customer { public str ...

随机推荐

  1. Geany——Python配置

    Geany是一个很不错的编辑器,操作很简单,这里记录一下Geany的入手设置(在下是一个Python程序猿,就以Python为例): 1:新建:选择 下拉菜单中的  main.py  ,然后就能生成P ...

  2. Java自学-异常处理 Exception

    Java 异常 Exception 异常定义: 导致程序的正常流程被中断的事件,叫做异常 步骤 1 : 文件不存在异常 比如要打开d盘的LOL.exe文件,这个文件是有可能不存在的 Java中通过 n ...

  3. Ueditor 关于视频上传相关问题

      !!!每次改动后记得,清除一下浏览器缓存再试 !!!   4点: 1.修复编辑时视频不能预览问题: 2.插入视频的时候.在预览的窗口提示 “输入的视频地址有误,请检查后再试!” 3.ueditor ...

  4. 【转】Vue项目报错:Uncaught SyntaxError: Unexpected token <

    这篇文章主要介绍了Vue项目报错:Uncaught SyntaxError: Unexpected token <,在引入第三方依赖的 JS 文件时,遇到的一个问题,小编觉得挺不错的,现在分享给 ...

  5. Java 初识

    一.Java 简介 1.什么是 Java Java 语言是美国 Sun 公司(Stanford University Network),在1995年推出的高级的编程语言,所谓编程语言,是计算机的语言, ...

  6. Jvm调优积累的文章

    Linux查看CPU和内存使用情况 stat命令查看jvm的GC情况 (以Linux为例) jvm优化必知系列——监控工具 Java JVM 参数设置大全

  7. Excel 逐条导入Mysql(数据更新)

    其实,我的业务流程是, 先读取excel/csv -> pandas 数据清洗 -> 导入Mysql, 一般是做一个表append 或者是 if exist -> replace的操 ...

  8. 基于TCP协议的大文件传输(粘包问题处理)

    基于TCP的大文件上传服务端实现 # 服务端 # -*- coding: utf-8 -*- from socket import * import json, struct server = soc ...

  9. jmap错误:unknown CollectedHeap type : class sun.jvm.hotspot.gc_interface.CollectedHeap

    原文:https://www.jianshu.com/p/0e5d8db8ed5e 错误场景 今天使用jmap -heap命令查看堆的详细信息报错. [root@instance-2gak1pfv d ...

  10. 生产环境碰到系统CPU飙高和频繁GC系统反应慢,你要怎么排查?(转)

    处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警.本文主要针对系统运行缓慢这 ...