当电子邮件验证规则在sails.js的模块上失败时,服务器崩溃了。 这是我模块的片段: //用户的电子邮件地址
email: {
type: 'string',
email: true,
required: true,
unique: true
},
错误如下:
错误:错误(E_VALIDATION):: 1属性无效 在WLValidationError.WLError(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ waterline \ lib \ waterline \ error \ WLError.js:26:15) 在新的WLValidationError(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ waterline \ lib \ waterline \ error \ WLValidationError.js:20:28) 在C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ waterline \ lib \ waterline \ query \ validate.js:45:43 at allValidationsChecked(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ waterline \ lib \ waterline \ core \ validations.js:203:5) 完成后(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:135:19) 在C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:32:16 在C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ waterline \ lib \ waterline \ core \ validations.js:184:23 完成后(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:135:19) 在C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:32:16 在C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ waterline \ lib \ waterline \ core \ validations.js:157:64 在C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:125:13 at Array.forEach(native) 在_each(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:46:24) at Object.async.each(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:124:9) at validate(C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ waterline \ lib \ waterline \ core \ validations.js:156:11) 在C:\ Users \ yuri \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ async \ lib \ async.js:125:13 发送给用户的属性无效: •电子邮件 •
undefined
应该是电子邮件(而不是“admin @ gmailasd”,这是一个字符串)
答案 0 :(得分:7)
声明电子邮件字段的正确方法如下:
email: {
type: 'email',
required: true,//Email field will be required for insert or update
unique: true //Insert or update will crash if you try to insert duplicate email
},
您可以在此处查看所有不同的属性类型http://sailsjs.org/documentation/concepts/models-and-orm/attributes
如果要捕获插入/更新错误,可以在控制器上执行此操作:
MyModel.create({email:email}).exec(function(err, model)
{
if(err)
{
//Check if it's a validation error or a crash
if(err.code == "E_VALIDATION")
sails.log.debug("valid fail, check form");
else
sails.log.debug("crash");
}
else
{
//do what you want to do with the data
}
});
答案 1 :(得分:2)
她的回答。 感谢jaumard,我发现了这个问题。 我错误地使用了未定义的字段,而没有检查是否存在之前 err.originalError.code但它未定义。 所以正确的方法是: err.originalError&& err.originalError.code&& err.originalError.code === 11000
而不是 err.originalError.code === 11000。
答案 2 :(得分:1)
以前版本的Sails建议像这样实现电子邮件验证
电子邮件:{ 键入:' string', 电子邮件:是的, 要求:是的 },
当前版本应该是这样的
电子邮件:{ 输入:' email', 要求:是的 },