node.js - Mongoose - 枚举字符串数组
问题描述
我有一个模式,它的属性具有预定义的字符串数组类型。
这是我试图做的:
interests: {
type: [String],
enum: ['football', 'basketball', 'read'],
required: true
}
问题是,当我尝试输入未在枚举上定义的错误值时,它不会使用枚举列表对其进行验证。
例如,这将通过它不应该通过:
{ "interests": ["football", "asdf"] }
因为"asdf"
未在枚举列表中预定义它不应该通过验证,但不幸的是,它通过了验证并保存它。
我试图用字符串类型的值而不是字符串数组来检查这个东西,它可以工作。
例如:
interests: {
type: String,
enum: ['football', 'basketball', 'read'],
required: true
}
例如,这按预期失败:
{ "interest": "asdf" }
总之,我需要一个带有字符串数组类型的模式属性,该属性将根据预定义的值检查它的元素
实现这一目标的最有效方法是使用 validate 方法还是有更好的方法?
解决方案
您可以尝试自定义验证吗?像这样
const userSchema = new Schema({
phone: {
type: String,
validate: {
validator: function(v) {
return /\d{3}-\d{3}-\d{4}/.test(v);
},
message: props => `${props.value} is not a valid phone number!`
},
required: [true, 'User phone number required']
}
});
推荐阅读
- python - Keras 自定义数据生成器通过多输入和多输出提供维度错误(功能性 api 模型)
- php - 数组、数组和对象
- macos - macOS Big Sur - 安装所选更新时出错
- javascript - 满足按钮单击条件以在javascript中显示消息
- powershell - 分隔输入到字符串中的值
- typescript - Angular TS 构造函数使网页消失
- php - 在 WooCommerce 预订和约会中添加 2 周额外约会
- javascript - React 和 Redux:Payload 未出现在 Reducer 状态对象中
- model - Mlogit:如何在 fitstat 上解释模型的充分性
- c# - 我有一个小数添加奇怪的问题