📅  最后修改于: 2023-12-03 15:32:57.556000             🧑  作者: Mango
在Mongoose中,我们可以使用Mongoose ID验证器来确保我们的模型实例属性是有效的MongoDB ObjectIds。 这个验证器可以被用来确保你的模型只接受MongoDB的ObjectIds,而不是其他类型的值。
您需要先安装Mongoose才能使用Mongoose ID验证器。 您可以通过以下命令在您的项目中安装它:
npm install mongoose
使用Mongoose ID验证器很简单。 你只需要在模式定义中将验证器添加到你的模型实例属性中。 例如,假设您有一个名为User
的模型,并且您希望确保_id
属性始终是MongoDB的ObjectIds您可以按照以下方式定义您的模式:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
default: () => new mongoose.Types.ObjectId(),
required: true,
validate: {
validator: (value) => {
return mongoose.Types.ObjectId.isValid(value);
},
message: "Invalid ObjectId",
},
},
name: String,
});
const User = mongoose.model('User', UserSchema);
module.exports = User;
现在你的User
模型会在保存时验证_id
字段是否是一个有效的MongoDB ObjectIds。 如果不是,则会抛出一个ValidationError。
Mongoose ID验证器有几个选项可用于自定义验证器的行为。 下面是一些最常用的选项:
required
: 如果设置为true
,则该属性是必需的。 如果未设置_id
字段,则Mongoose将自动为其生成一个MongoDB生成的ObjectId。 如果未设置default值,则会获得一个随机的ObjectId。 默认为 false
。validate
: 验证器功能接受一个名为value
的参数,该参数是待验证属性的值。 验证器功能应该返回一个布尔值,如果该属性是有效的MongoDB ObjectIds,则返回true
,否则返回false
。 如果验证器函数返回false
,则将抛出一个ValidationError。 如果验证器返回一个字符串,则它将被作为错误消息使用。message
: 如果validate
选项失败,将使用该字符串作为错误消息返回。Mongoose ID验证器是一个非常有用的工具,可以帮助您保护您的MongoDB数据库免受来自无效ObjectId的错误请求。 此外,它还可以确保您的模型只接受MongoDB的ObjectIds,而不是其他值。