什么是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. js/jquery键盘事件及keycode大全

    js/jquery的键盘事件分为keypress.keydown和keyup事件 一.键盘事件 1.keydown()事件当按钮被按下时,发生 keydown 事件. 2.keypress()事件ke ...

  2. 财产PROPRETIE英语PROPRETIE房地产

    property Alternative forms propretie English English Wikipedia has articles on: Property (disambigua ...

  3. SAP技术 - How to create a CDS redirect view for a given database table

    Scenario Suppose we have a database table A, and then we create a CDS redirect view B for it, then e ...

  4. springboot:使用JPA-Hibernate

    步骤: 在pom.xml文件中添加mysql,spring-data-jpa的依赖. <!-- 添加mysql数据库驱动依赖--> <dependency> <group ...

  5. VS2015配置Qt5

    目录 需要准备的东西 VS2015 Qt5 VS2015 Qt插件 rc.exe无法启动 基于CMake的Qt工程 reference 需要准备的东西 Visual Studio 2015 Qt5 V ...

  6. H3C 802.11 WEP加密特点与注意事项

  7. go test benchmark

    Benchtest的简单使用 一个简单的benchtest用例 // 以BenchmarkXXX类似命名,并传入b *testing.B 参数 func BenchmarkLoopSum(b *tes ...

  8. Django 之 rest_framework 响应器使用

    Django 之 rest_framework 响应器使用 使用部分: 第一步:导入模块 from rest_framework.renders import BrowsableAPIRenderer ...

  9. 【Linux】Linux下查找JDK默认安装路径

    一.查找效果图 二.查找步骤 1.首先确认是否已按照JDKjava -version [root@iZ2ze3zda3caeyx6pn7c5zZ base-eureka]# java -version ...

  10. 详解Eureka 缓存机制

    原文:https://www.cnblogs.com/yixinjishu/p/10871243.html 引言 Eureka是Netflix开源的.用于实现服务注册和发现的服务.Spring Clo ...