文章目录
前言
一、required验证器
1.required: true
代码如下:
const booksSchema = new mongoose.Schema({
name: {
type: String,
required: true // required为true,表示必填字段
}
})
const books = mongoose.model('book', booksSchema)
books.create({}, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
执行结果:因为name为必填字段,插入文档时没有填写,所以报错。
name: ValidatorError: Path `name` is required.
2.required: [true, ‘自定义错误信息’]
代码如下:
const booksSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'name为必填字段']
}
})
const books = mongoose.model('book', booksSchema)
books.create({}, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
执行结果:
name: ValidatorError: name为必填字段
二、String类型中的 enum、 maxlength 和 minlength 验证器
1.minlength、maxlength验证器
代码如下:
const booksSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'name为必填字段'],
minlength: [2, 'name字段最小长度为2'],
maxlength: [8, 'name字段最大长度为8']
}
})
const books = mongoose.model('book', booksSchema)
books.create({ name: 'aaaaaaaaaaaaaaa' }, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
执行结果:
name: ValidatorError: name字段最大长度为8
2.enum 验证器
代码如下:
const booksSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'name为必填字段'],
minlength: [2, 'name字段最小长度为2'],
maxlength: [8, 'name字段最大长度为8']
},
type: {
type: String,
enum: ['仙侠修真', '恐怖悬疑', '热血冒险']// type字段的值只能是这三个
}
})
const books = mongoose.model('book', booksSchema)
books.create({ name: '凡人修仙传', type: '修仙' }, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
执行结果:
type: ValidatorError: `修仙` is not a valid enum value for path `type`.
三、Number类型中的 max 和 min 验证器
代码如下:
const booksSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'name为必填字段'],
minlength: [2, 'name字段最小长度为2'],
maxlength: [8, 'name字段最大长度为8'],
trim: true // 去除字符串两端空格
},
type: {
type: String,
enum: ['仙侠修真', '恐怖悬疑', '热血冒险']
},
number: {
type: Number,
min: [0, 'number字段最小数值为0'],
max: [10, 'number字段最大数值为10'],
required: true
}
})
const books = mongoose.model('book', booksSchema)
books.create({ name: ' 凡人修仙传 ', type: '仙侠修真', number: 100 }, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
执行结果:
number: ValidatorError: number字段最大数值为10
四、自定义验证器
代码如下:
const booksSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'name为必填字段'],
minlength: [2, 'name字段最小长度为2'],
maxlength: [8, 'name字段最大长度为8'],
trim: true // 去除字符串两端空格
},
type: {
type: String,
enum: ['仙侠修真', '恐怖悬疑', '热血冒险']
},
number: {
type: Number,
min: [0, 'number字段最小数值为0'],
max: [10, 'number字段最大数值为10'],
required: true
},
author: {
type: String,
validate: {
validator: (value) => { // value为传入的值
// 返回true验证成功,返回false验证失败
return value == '忘语'
},
message: '作者名字写错了' // 自定义错误信息
},
required: true
}
})
const books = mongoose.model('book', booksSchema)
books.create({ name: ' 凡人修仙传 ', type: '仙侠修真', number: 10, author: '忘语111' }, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
执行结果:
author: ValidatorError: 作者名字写错了
更改代码:
books.create({ name: ' 凡人修仙传 ', type: '仙侠修真', number: 10, author: '忘语' }, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
文档插入成功:
{
name: '凡人修仙传',
type: '仙侠修真',
number: 10,
author: '忘语',
_id: new ObjectId("61e25424dc01768d7b9dec8b"),
__v: 0
}
五、获取错误信息
其中number字段和author字段是填写错误的:
const booksSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'name为必填字段'],
minlength: [2, 'name字段最小长度为2'],
maxlength: [8, 'name字段最大长度为8'],
trim: true // 去除字符串两端空格
},
type: {
type: String,
enum: ['仙侠修真', '恐怖悬疑', '热血冒险']
},
number: {
type: Number,
min: [0, 'number字段最小数值为0'],
max: [10, 'number字段最大数值为10'],
required: true
},
author: {
type: String,
validate: {
validator: (value) => { // value为传入的值
// 返回true验证成功,返回false验证失败
return value == '忘语'
},
message: '作者名字写错了' // 自定义错误信息
},
required: true
}
})
const books = mongoose.model('book', booksSchema)
books.create({ name: ' 凡人修仙传 ', type: '仙侠修真', number: 200, author: '忘语111' }, (err, res) => {
if (err) {
console.log(err)
return err
}
console.log(res)
})
错误信息:
Error: book validation failed: number: number字段最大数值为10, author: 作者名字写错了
at ValidationError.inspect (D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\error\validation.js:48:26)
at internal/per_context/primordials.js:23:32
at formatValue (internal/util/inspect.js:783:19)
at inspect (internal/util/inspect.js:337:10)
at formatWithOptionsInternal (internal/util/inspect.js:2016:40)
at formatWithOptions (internal/util/inspect.js:1898:10)
at console.value (internal/console/constructor.js:323:14)
at console.log (internal/console/constructor.js:358:61)
at D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\mongoose验证.js:44:17
at D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\helpers\promiseOrCallback.js:17:11 {
errors: {
number: ValidatorError: number字段最大数值为10
at validate (D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\schematype.js:1277:13)
at D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\schematype.js:1260:7
at Array.forEach (<anonymous>)
at SchemaNumber.SchemaType.doValidate (D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\schematype.js:1210:14)
at D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\document.js:2700:18
at processTicksAndRejections (internal/process/task_queues.js:75:11) {
properties: [Object],
kind: 'max',
path: 'number',
value: 200,
reason: undefined,
[Symbol(mongoose:validatorError)]: true
},
author: ValidatorError: 作者名字写错了
at validate (D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\schematype.js:1277:13)
at D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\schematype.js:1260:7
at Array.forEach (<anonymous>)
at SchemaString.SchemaType.doValidate (D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\schematype.js:1210:14)
at D:\vscode\nodejs\FJstudy\mongoose\1.连接数据库\node_modules\mongoose\lib\document.js:2700:18
at processTicksAndRejections (internal/process/task_queues.js:75:11) {
properties: [Object],
kind: 'user defined',
path: 'author',
value: '忘语111',
reason: undefined,
[Symbol(mongoose:validatorError)]: true
}
},
_message: 'book validation failed'
}
更改后的代码如下:
books.create({ name: ' 凡人修仙传 ', type: '仙侠修真', number: 200, author: '忘语111' }, (err, res) => {
if (err) {
// console.log(err.errors)
const errors = err.errors
for (var key in errors) {
console.log(errors[key]['properties'][['message']]);
}
return err
}
console.log(res)
})
提取后的错误信息:
number字段最大数值为10
作者名字写错了
六、预定义模式修饰符
1、trim
代码如下:
const singersSchema = new mongoose.Schema({
name: {
type: String,
trim: true // 去掉两端空格
}
})
const Singers = mongoose.model('singer', singersSchema)
Singers.create({ name: ' Leslie Cheung ' }, (err, res) => {
if (err)
return err
console.log(res)
})
执行结果:
{
name: 'Leslie Cheung',
_id: new ObjectId("61e2853521f0e96062807374"),
__v: 0
}
2、uppercase
代码如下:
const singersSchema = new mongoose.Schema({
name: {
type: String,
uppercase: true // 字符串全部变为大写
}
})
const Singers = mongoose.model('singer', singersSchema)
Singers.create({ name: ' Leslie Cheung ' }, (err, res) => {
if (err)
return err
console.log(res)
})
执行结果:
{
name: ' LESLIE CHEUNG ',
_id: new ObjectId("61e2858a014ba42ff721a82d"),
__v: 0
}
3、lowercase
代码如下:
const singersSchema = new mongoose.Schema({
name: {
type: String,
lowercase: true // 字符串全部变为小写
}
})
const Singers = mongoose.model('singer', singersSchema)
Singers.create({ name: ' Leslie Cheung ' }, (err, res) => {
if (err)
return err
console.log(res)
})
执行结果:
{
name: ' leslie cheung ',
_id: new ObjectId("61e2860ad35d71722d823831"),
__v: 0
}
4、default
代码如下:
const singersSchema = new mongoose.Schema({
name: {
type: String,
default: '张国荣' // 设置默认值
}
})
const Singers = mongoose.model('singer', singersSchema)
Singers.create({}, (err, res) => {
if (err)
return err
console.log(res)
})
执行结果:
{ name: '张国荣', _id: new ObjectId("61e28736d8ad21418dc3ff27"), __v: 0 }