“email”验证规则崩溃sails服务器 - Mongo与Sails.js

时间:2015-04-16 13:08:51

标签: sails.js waterline

当电子邮件验证规则在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”,这是一个字符串)

3 个答案:

答案 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',   要求:是的 },