Sails.js中的模型validation失败

我在Sails.js中testing了以下Employee.js模型,并发现了一些难以理解的东西。

在创build新员工的表单发布时,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 } } } }; 

定义2: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 } } } }; 

创build新员工的表单如下:

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

只有一个区别应该存在。 在第二个模型中,电子邮件属性不需要包含有效电子邮件格式的string。 据我所知,定义如;

 name: { type: "STRING" } 

 name: "STRING" 

意图是等同的,所以这可能是一个在水线的错误。

虽然前一段时间被问到这个问题,但仍然值得提出一个问题以确保解决问题。

这应该工作:

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