[英]minlength validator not working in mongoose
我在 mongoose 中創建了架構
let userSchema = new Schema({
name: {
type: String,
required: true,
lowercase: true,
trim: true,
minLength: 4,
maxLength: 15
}
});
當我用這個查詢更新它時
user.updateOne(
{ "_id" : body.id },
{ $set: {
name:body.name,
phone:body.phone,
designation:body.designation,
address:body.address
} }
).then(function (updateDate) {
var data={message:"success",data:updateDate}
callback(data)
}).catch(function (err) {
var data={message:"error",data:err}
callback(data);
});
如果我更新長度為 2 的字符串,它不會引發任何錯誤。 stackoverflow 上的解決方案很少,但這些在我的情況下不起作用
首先,在您的模式中minLength
必須是minlength
,並且maxLength
必須是帶有小寫l的maxlength
。
所以你的架構必須是這樣的:
let userSchema = new Schema({
name: {
type: String,
required: true,
lowercase: true,
trim: true,
minlength: 4,
maxlength: 15
}
});
其次,您需要在 updateOne 中添加{runValidators: true}
選項。
更新驗證器默認關閉 - 您需要指定 runValidators 選項。
所以你的代碼必須是這樣的:
user.updateOne(
{ _id: body.id },
{
$set: {
name: body.name,
phone: body.phone,
designation: body.designation,
address: body.address
}
},
{ runValidators: true }
)
.then(function(updateDate) {
var data = { message: "success", data: updateDate };
callback(data);
})
.catch(function(err) {
var data = { message: "error", data: err };
callback(data);
});
在這里的文檔中,它說:
驗證是中間件。 默認情況下,Mongoose 將驗證注冊為每個模式的 pre('save') 掛鈎。
它還提到了關於 findAndUpdate() 和 Query Middleware 的注釋:
不會在 update()、findOneAndUpdate() 等上執行 pre 和 post save() 鈎子。
因此,在您的 function 中,驗證器不會運行。 您可以通過將runValidators: true
添加到選項來解決它(更多信息 在這里)。
您只需打開 mongodb Compass 然后 go 到驗證選項並將驗證級別更改為嚴格模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.