2016-08-23 82 views
0

当我运行尝试创建一个新的地址时,由于自定义验证程序,验证每次都失败。当我用“返回true”替换companyExists内容时,它仍然失败。我发现一个解决方法是将其中一个文件中的自定义验证器重命名为诸如companyExists2之类的其他文件。看起来自定义验证器不能具有相同的名称。这是Sails.js的预期行为吗?邮差返回400错误说验证失败的JSON响应:是否需要独特的自定义验证器名称?

"invalidAttributes": { 
    "company": [ 
    { 
     "rule": "companyExists", 
     "message": "\"companyExists\" validation rule failed for input: 1\nSpecifically, it threw an error. Details:\n undefined" 
     } 
    ] 
}, 

在模型/ Address.js我:

module.exports = { 
    attributes: { 
     street: { 
      type: 'string' 
     }, 
     // More attributes 
     company: { 
      model: 'company', 
      required: true, 
      unique: true, 
      companyExists: true 
     } 
    }, 
    types: { 
     companyExists: function(companyID) { 
      Company.findOne(companyID).exec(function(err, company) { 
       if (err || !company) return false; 
       return true; 
      }); 
     } 
    } 
}; 

在模型/ Company.js我:

module.exports = { 
    attributes: { 
     name: { 
      type: 'string', 
      required: true 
     }, 
     // More attributes 
     company: { 
      model: 'company', 
      required: true, 
      unique: true, 
      companyExists: true 
     } 
    }, 

    types: { 
     companyExists: function(companyID) { 
      Company.findOne(companyID, function (err, company) { 
       if (err || !company) return false; 
       return true; 
      }); 
     } 
    } 
}; 

回答

0

自定义验证规则与内置合并规则合并。这使得他们可以在所有模型中访问。如果你多次需要相同的规则,你只需要写一次(在哪个模型中无关紧要)。

您还必须小心,不要与现有规则相冲突。你可以找到完整的列表here