風帆/水線是否提供聲明方式來強制我的模型中的數組元素是字符串類型?或者我必須編寫代碼來執行此驗證?風帆/水線中的字符串數組模型w /數組字符串
1
A
回答
1
據我所知,在模型聲明中沒有辦法做到這一點。但是,您可以在「beforeValidate」回調中輕鬆完成。
如果您在代碼段here的註釋中註明,將任何內容傳遞給生命週期回調中的回調將觸發錯誤,因此只需要這一小段代碼即可驗證數組僅包含字符串:
beforeValidate: function (values, cb) {
values.arrOfStrings.forEach(function(str) {
if (typeof(str) != "string") {
cb("err: arrOfStrings must contain only strings");
}
}
cb()
}
2
看來,這可以通過添加自定義類型的模型(Waterline readme描述)來完成:需要
module.exports = {
types: {
stringArray: function(array){
if (!Array.isArray(array)) {
return false;
} else {
return array.every(function (value) {
return typeof(value) === "string"
});
}
}
},
attributes: {
someArrayOfStrings : {
type: 'array',
stringArray: true
}
}
};
自定義驗證碼,但至少這種方法適用於驗證引擎並允許在模型中進行聲明性驗證。
+1
數組類型有點不對?每次使用時需要檢查類型。 :/ – Kefka 2015-12-28 17:59:10
0
由於HolySamosa,指出(但我會在文檔中末附上更詳細的網頁)
自定義的驗證
您可以定義自己的類型及其與類型的驗證目的。可以訪問和比較其他屬性的值。這使您可以將驗證業務邏輯移入您的模型並從您的控制器邏輯中移出。
var User = Waterline.Collection.extend({
types: {
point: function(latlng){
return latlng.x && latlng.y
},
password: function(password) {
return password === this.passwordConfirmation;
});
},
attributes: {
firstName: {
type: 'string',
required: true,
minLength: 5,
maxLength: 15
},
location: {
type: 'json',
point: true
},
password: {
type: 'string',
password: true
},
passwordConfirmation: {
type: 'string'
}
}
});
,以便在上面的例子中,你可以使用HolySamosa的功能以及。使用了`forEach`是
https://github.com/balderdashy/waterline-docs/blob/master/models/validations.md
相關問題
- 1. 風帆/水線模型幫助 - 如何存儲可能是數組,json或字符串的數據?
- 2. 字符串數組中的字符串
- 3. 反向字符串數組w /方法
- 4. 字符串的字符數組和字符數組至字符串轉換
- 5. 字符串數組匹配字符串
- 6. 變換[字符串,字符串]數組
- 7. 單選字符串,字符串數組
- 8. 添加字符串,字符串數組
- 9. JSON字符串到字符串數組
- 10. 字符串數組來字謎字符串數組
- 11. 字符串數組
- 12. 字符串數組
- 13. 字符串數組
- 14. 字符串數組
- 15. 字符串數組
- 16. 字符串數組
- 17. 錯誤獲取字符串數組字符串&字符串數組int
- 18. 無符號字符數組到寬字符數組/字符串
- 19. 字節數組字符串
- 20. 字符串字節數組
- 21. 初始化字符串數組從字符串數組資源
- 22. 字符串數組至2D字符串數組
- 23. 將字符串數組轉換爲字符串數組
- 24. 用其他字符串數組替換字符串數組?
- 25. 數組字符串不被識別爲數組字符串
- 26. 轉:將字符串數組轉換爲Json數組字符串
- 27. 確定字符串數組或字符串數組Grails
- 28. 數組[字符串]或字符串到字符串
- 29. 字符串數組中golang
- 30. 查找字符串的二維數組中的字符串數
注:這是異步,所以這些潛在的回調都將被調用。 JS引擎會繼續執行forEach,調用'cb()',並且數組中的最後一項觸發不等式 - 現在'cb'被調用兩次。因此,如果你想讓引擎停留在迭代直到完成,你可以將它重構爲'for(i)'循環。 – Cody 2015-07-04 16:54:27