【发布时间】:2014-07-29 11:46:24
【问题描述】:
我有一个看起来像这样的猫鼬模式:
var userSchema = new Schema({
username: {type: String, required: true, index: {unique: true}},
usernameCanonical: {type: String, required: true, index: {unique: true}}
});
userSchema.pre("save", function () {
this.usernameCanonical = this.username.toLowerCase();
return next();
});
我希望能够只通过输入用户名来创建新用户,并让 usernameCanonical 由模型自动生成。
var user = new User({
username: "EXAMPLE_USERNAME"
});
user.save()
当我尝试执行此操作时,我收到来自 mongoose 的验证错误,提示需要 usernameCanonical。
Path `usernameCanonical` is required.
问题似乎是在验证后调用了预保存挂钩。我不想每次保存新用户时都必须手动添加规范用户名。我也不想从架构中删除 required 选项。
有没有办法让猫鼬模型自动生成必填字段?向架构中的 usernameCanonical 字段添加默认值似乎可以防止验证错误,但感觉就像是 hack。
【问题讨论】:
-
我想你已经在这里发现了你自己的问题。当您从不打算提供值并且您总是要在预保存挂钩中计算它时,应该不需要将字段标记为“必需”,然后它就会否定逻辑。验证“必需”输入的含义正是它所说的。
-
试试
schema.pre('validate', etc)