Mongoose中如何为用户Schema的role字段设置预定义可选值?
如何限制Mongoose Schema中role字段只能选择预定义值?
你可以通过以下两种方式实现role字段只能在admin和manager中选择:
方法一:使用Mongoose内置的enum属性(推荐)
这是最简洁直接的方式,利用Mongoose原生支持的枚举验证:
const userSchema = new mongoose.Schema({ username: { type: String, validate: function (v) { return /([0-9a-zA-Z])\w{6,}/.test(v); }, required: [true, "Username required"], }, passwordHash: { type: String, required: [true, "PasswordHash required"], }, role: { type: String, required: [true, "User role required"], enum: { values: ['admin', 'manager'], message: '角色只能是admin或manager' } }, });
说明:
values数组指定了允许的所有角色值message是验证失败时返回的自定义提示信息,方便捕获错误
方法二:自定义验证器
如果需要更灵活的验证逻辑(比如后续动态调整可选角色列表),可以用自定义验证函数:
const userSchema = new mongoose.Schema({ username: { type: String, validate: function (v) { return /([0-9a-zA-Z])\w{6,}/.test(v); }, required: [true, "Username required"], }, passwordHash: { type: String, required: [true, "PasswordHash required"], }, role: { type: String, required: [true, "User role required"], validate: { validator: function(v) { // 检查传入值是否在允许的列表中 return ['admin', 'manager'].includes(v); }, message: props => `${props.value} 不是有效的角色,只能选择admin或manager` } }, });
说明:
validator函数返回true表示验证通过,返回false则触发验证失败props.value可以获取到当前传入的无效值,用于生成更精准的错误提示
内容的提问来源于stack exchange,提问作者user.mokho
相关产品推荐
相关产品推荐

