javascript - query - sails where not
La validaciĆ³n del modelo falla en Sails.js (2)
Esto debería funcionar:
email: {
type: ''email'',
required: true,
unique: true
}
Probé el siguiente modelo de Employee.js en Sails.js y encontré algo que me parece difícil de entender.
Cuando se publica el formulario para crear un nuevo empleado, recibí los siguientes errores con la primera definición del modelo de Employee.js, pero funciona la segunda definición de Employee.js. Entonces, ¿cuál es la diferencia entre las dos definiciones de Employee.js?
Errores:
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
Definición 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
}
}
}
};
Definición2: 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
}
}
}
};
El formulario para crear un nuevo empleado es el siguiente:
<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>
Solo hay una diferencia que debería existir. En su segundo modelo, el atributo de correo electrónico no requerirá una cadena que contenga un formato de correo electrónico válido. Que yo sepa, definiciones tales como;
name: {
type: "STRING"
}
y
name: "STRING"
Están destinados a ser equivalentes, por lo que este es potencialmente un error en la línea de flotación.
Aunque hace un tiempo se planteó esta pregunta, podría valer la pena extraer un problema para garantizar que se aborde.