2014-11-17 11 views
7

Ho testato il seguente modello Employee.js in Sails.js e ho trovato qualcosa che mi sembra difficile da capire.Convalida del modello non riuscita in Sails.js

Quando viene pubblicato il modulo per la creazione di un nuovo dipendente, ho ricevuto i seguenti errori con la prima definizione del modello Employee.js, ma la seconda definizione di Employee.js funziona. Quindi qual è la differenza tra le due definizioni di Employee.js?

Errori:

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 

Definizione 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 
     } 
    } 

    } 
}; 

Il modulo per creare un nuovo dipendente è come segue:

<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

cosa fa il tuo percorso e aspetto del controller come? – CaseyWebb

risposta

0

C'è una sola differenza che dovrebbe esistere. Nel secondo modello l'attributo e-mail non richiede una stringa che contenga un formato e-mail valido. Per quanto ne so, definizioni come;

name: { 
    type: "STRING" 
} 

e

name: "STRING" 

sono destinati ad essere equivalente, quindi questo è potenzialmente un bug in linea di galleggiamento.

Sebbene questa domanda sia stata posta qualche tempo fa, potrebbe valere ancora la pena di risolvere un problema per garantire che venga risolto.

0

Questo dovrebbe funzionare:

email: { 
    type: 'email', 
    required: true, 
    unique: true 
}