我已經建立了這樣的模式如何驗證類型和值。貓鼬,當更新/ findOneAndUpdate
它工作正常的創作。如果缺少必需或錯誤的類型,它會引發驗證錯誤。因此,將檢查這兩個類型和值(如果我增加額外的驗證函數來驗證每個字段中的值)
然而,當我嘗試更新或findOneAndUpdate。我已經將runValidators設置爲true。它以某種方式工作,但它只會驗證是否需要丟失。但它沒有驗證類型,可能會自動將我的類型轉換爲格式。
e.g如果我設置isAction(希望是布爾值)爲整數時,它會自動轉換成布爾值false。所以它有點繞過了類型驗證。然後它將進入已經布爾的驗證器功能,但我希望它應該在輸入驗證函數之前拋出驗證錯誤。
另一個問題是數組和對象。它沒有驗證對象中深度屬性的類型,並直接進入驗證函數。
所以我想看看是否有更好的方式來驗證這兩種類型和值正確時更新/ findOneAndUpdate。
我已經搜索了一些貓鼬驗證模塊,但其中大多數都是幫助每個字段的驗證功能。所以這些數據已經從整數轉換爲布爾值,並且當時無法檢查類型。
此時,我只能想到在插入/更新到貓鼬之前驗證類型和值。
const schema = new mongoose.Schema({{
id: {
type: String,
unique: true,
required: true,
},
address: {
formatted: String,
streetAddress: String,
locality: String,
region: String,
postalCode: String,
country: String,
},
isActive: Boolean,
});
const user = mongoose.model('User', schema);
// this one work with the validation on the type
User.create({ id : 'userA' }, (err) => {
console.log(err);
});
// fail to validate the type on both findOneAndUpdate
User.update({ id:'userA'},{ $set: { address:12313 }}, { runValidators: true}, (err) => {
console.log(err);
});
但是,前,後鉤的上下文是模型本身。即使我們可以得到查詢,但我需要手動檢查和驗證數據類型,我希望貓鼬根據模式定義的數據類型自動執行,並像創建一個新數據類型一樣行爲。 如果是這樣,爲什麼不手動更新數據之前自己執行驗證。 順便說一句,感謝您的幫助。 –