簡體   English   中英

最小長度驗證器在 mongoose 中不起作用

[英]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必須是帶有小寫lmaxlength

所以你的架構必須是這樣的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM