Mongoose 是一个 Node.js 的 MongoDB 驱动程序,它提供了一种方便的方式来定义和操作 MongoDB 的数据模型。在使用 Mongoose 的过程中,我们经常需要对数据进行验证,以确保数据的正确性和完整性。本文将介绍如何使用 Mongoose 验证 MongoDB 的模型数据。
定义模型
在使用 Mongoose 验证数据之前,我们需要先定义数据模型。下面是一个简单的例子:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: { type: String, required: true }, age: { type: Number, min: [18, '年龄太小'], max: [120, '年龄太大'] }, email: { type: String, required: true, unique: true, match: /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/ }, password: { type: String, required: true, minlength: [6, '密码太短'], maxlength: [20, '密码太长'] } }); const User = mongoose.model('User', userSchema); module.exports = User;
在上面的代码中,我们定义了一个名为 User 的模型,它包含了 name、age、email 和 password 四个字段。其中,name 和 email 是必填字段,age 必须在 18 到 120 之间,email 必须符合电子邮件的格式,password 的长度必须在 6 到 20 之间。
数据验证
在使用 Mongoose 保存数据时,Mongoose 会自动进行数据验证。我们可以在模型定义中使用各种验证器来定义如何验证数据。
必填字段验证
在上面的例子中,我们使用了 required 验证器来确保 name 和 email 字段是必填的。如果我们试图保存一个不包含 name 或 email 字段的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
// javascriptcn.com 代码示例 const User = require('./models/user'); const user = new User({ age: 20, email: 'test@example.com', password: '123456' }); user.save() .then(() => { console.log('保存成功'); }) .catch((error) => { console.log(error.message); });
在上面的代码中,我们试图保存一个不包含 name 字段的用户文档。由于 name 字段是必填字段,Mongoose 将会抛出一个 ValidationError,提示我们 name 字段是必填的。
值范围验证
在上面的例子中,我们使用了 min 和 max 验证器来确保 age 字段的值在 18 到 120 之间。如果我们试图保存一个年龄小于 18 或大于 120 的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
// javascriptcn.com 代码示例 const User = require('./models/user'); const user = new User({ name: '张三', age: 16, email: 'test@example.com', password: '123456' }); user.save() .then(() => { console.log('保存成功'); }) .catch((error) => { console.log(error.message); });
在上面的代码中,我们试图保存一个年龄小于 18 的用户文档。由于 age 字段的值不在 18 到 120 之间,Mongoose 将会抛出一个 ValidationError,提示我们年龄太小。
正则表达式验证
在上面的例子中,我们使用了 match 验证器来确保 email 字段符合电子邮件的格式。如果我们试图保存一个不符合电子邮件格式的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
// javascriptcn.com 代码示例 const User = require('./models/user'); const user = new User({ name: '张三', age: 20, email: 'test', password: '123456' }); user.save() .then(() => { console.log('保存成功'); }) .catch((error) => { console.log(error.message); });
在上面的代码中,我们试图保存一个 email 字段不符合电子邮件格式的用户文档。由于 email 字段不符合电子邮件格式,Mongoose 将会抛出一个 ValidationError,提示我们 email 不符合格式。
字符串长度验证
在上面的例子中,我们使用了 minlength 和 maxlength 验证器来确保 password 字段的长度在 6 到 20 之间。如果我们试图保存一个长度小于 6 或大于 20 的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
// javascriptcn.com 代码示例 const User = require('./models/user'); const user = new User({ name: '张三', age: 20, email: 'test@example.com', password: '123' }); user.save() .then(() => { console.log('保存成功'); }) .catch((error) => { console.log(error.message); });
在上面的代码中,我们试图保存一个 password 字段长度小于 6 的用户文档。由于 password 字段长度小于 6,Mongoose 将会抛出一个 ValidationError,提示我们密码太短。
自定义验证器
除了内置的验证器之外,我们还可以定义自己的验证器。下面是一个例子:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: { type: String, required: true }, age: { type: Number, min: [18, '年龄太小'], max: [120, '年龄太大'] }, email: { type: String, required: true, unique: true, match: /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/ }, password: { type: String, required: true, minlength: [6, '密码太短'], maxlength: [20, '密码太长'] }, gender: { type: String, validate: { validator: (value) => { return ['male', 'female'].indexOf(value) !== -1; }, message: '性别必须为 male 或 female' } } }); const User = mongoose.model('User', userSchema); module.exports = User;
在上面的代码中,我们定义了一个名为 gender 的字段,并使用了自定义的验证器来确保它的值为 male 或 female。如果我们试图保存一个 gender 字段不为 male 或 female 的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
// javascriptcn.com 代码示例 const User = require('./models/user'); const user = new User({ name: '张三', age: 20, email: 'test@example.com', password: '123456', gender: 'unknown' }); user.save() .then(() => { console.log('保存成功'); }) .catch((error) => { console.log(error.message); });
在上面的代码中,我们试图保存一个 gender 字段不为 male 或 female 的用户文档。由于 gender 字段的值不为 male 或 female,Mongoose 将会抛出一个 ValidationError,提示我们性别必须为 male 或 female。
总结
在本文中,我们介绍了如何使用 Mongoose 验证 MongoDB 的模型数据。我们可以使用内置的验证器来验证数据,也可以定义自己的验证器来验证数据。通过使用 Mongoose 的数据验证功能,我们可以确保数据的正确性和完整性,使我们的应用程序更加健壮和可靠。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657905dbd2f5e1655d2f33c3