2014-09-22 6 views

답변

1

지금까지 모델 선언에서 이렇게 할 방법이 없다는 것을 알 수있었습니다. 그러나 "beforeValidate"콜백에서 쉽게 수행 할 수 있습니다. 당신이 코드의 의견에주의 경우

오류를 트리거 라이프 사이클 콜백의 콜백에 아무것도 전달 here 니펫을, 그래서이 코드 약간은 당신이 당신의 배열은 문자열이 포함되어 있는지 확인하는 데 필요한 모든 것입니다 :

beforeValidate: function (values, cb) { 

    values.arrOfStrings.forEach(function(str) { 
    if (typeof(str) != "string") { 
     cb("err: arrOfStrings must contain only strings"); 
    } 
    } 

    cb() 
} 
+0

참고, 호출됩니다. JS 엔진은 forEach를 계속 진행하면서'cb()'를 호출하고, 배열의 마지막 항목이 부등호를 트리거합니다. 이제'cb'가 두 번 호출됩니다. 따라서 엔진을 완성 될 때까지 반복 상태로 유지하려면 'for (i)'루프를 리펙토링하십시오. – Cody

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

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