2014-11-17 2 views
7

Sails.js에서 다음 Employee.js 모델을 테스트했는데 이해하기 어려운 것으로 나타났습니다.모델 유효성 검사가 Sails.js에서 실패합니다.

새 Employee를 생성하기위한 양식이 게시되면 Employee.js 모델의 첫 번째 정의에서 다음 오류가 발생하지만 Employee.js의 두 번째 정의가 작동합니다. Employee.js의 두 정의 사이의 차이점은 무엇입니까?

오류 :

Error (E_VALIDATION) :: 3 attributes are invalid 
    at WLValidationError.WLError (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/error/WLError.js:33:18) 
    at new WLValidationError (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/error/WLValidationError.js:20:28) 
    at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/validate.js:45:43 
    at allValidationsChecked (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/core/validations.js:195:5) 
    at done (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:135:19) 
    at /usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:32:16 
    at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/core/validations.js:186:14 
    at done (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:135:19) 
    at /usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:32:16 
    at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/core/validations.js:157:64 

Invalid attributes sent to Employee: 
• name 
    • `undefined` should be a string (instead of "null", which is a object) 
    • "required" validation rule failed for input: null 
• email 
    • `undefined` should be a email (instead of "null", which is a object) 

    • "required" validation rule failed for input: null 
• password 
    • `undefined` should be a string (instead of "null", which is a object) 
    • "required" validation rule failed for input: null 

정의 1 : Employee.js

module.exports = { 
    attributes: { 

    name: { 
     type: 'STRING', 
    }, 

    email: { 
     type: 'STRING', 
     email: true, 
    }, 

    password: { 
     type: 'STRING', 
    }, 

    toJSON: function() { 
     var obj = this.toObject(); 

     return { 
     name: obj.name, 
     email: obj.email, 
     password: obj.password 
     } 
    } 

    } 
}; 

Definition2 : Employee.js

module.exports = { 
    attributes: { 

    name: 'STRING', 
    email: 'STRING', 
    password: 'STRING', 

    toJSON: function() { 
     var obj = this.toObject(); 

     return { 
     name: obj.name, 
     email: obj.email, 
     password: obj.password 
     } 
    } 

    } 
}; 

신입 사원을 만들기위한 형태는 다음과 같다 :

<form action="/signupemployee" method="POST"> 
    <table> 
    <tr><td>Name</td><td><input type=”text” name=”name”></td></tr> 
    <tr><td>Password</td><td><input type=”password” name=”password”></td></tr> 
    <tr><td>Email</td><td><input type=”email” name=”email”></td></tr> 
    <tr><td></td><td><input type="submit"></td> 
    </table> 
</form> 
+0

경로와 컨트롤러의 모습을 무엇처럼? – CaseyWebb

답변

0

존재해야 하나 개의 차이가있다. 두 번째 모델에서 email 속성은 유효한 전자 메일 형식을 포함하는 문자열을 요구하지 않습니다. 내 지식으로, 정의와 같은;

name: { 
    type: "STRING" 
} 

name: "STRING" 

동등한 것으로 의도되므로이 잠재적 워터 버그가된다.

비록이 질문이 얼마 전 제기되었지만 문제가 해결되었는지 확인할 수는 있습니다.

0

이 작동합니다 :

email: { 
    type: 'email', 
    required: true, 
    unique: true 
} 
관련 문제