我有两个角色,并希望根据传入数据中的角色字段对传入的帖子请求应用不同的数据验证规则,即。如果发布的角色是admin,则验证输入是否具有名称字段,如果role是user,则验证输入是否具有年龄。我在create方法的beforeRemote钩子中编写了验证代码,如:
if (role === "admin") {
Members.validatesPresenceOf('name');
next();
} else {
Members.validatesPresenceOf('age');
next();
}
对于第一个请求,如果role是admin,则验证将起作用,并且如果输入中不存在name,则捕获。但是对于下一个请求,如果role是user,则仍然会对name字段发生验证错误,而不是age。然后,如果我重新启动节点服务器并首先尝试使用用户角色,则会捕获年龄验证,但是对于所有后续请求,将检查年龄验证,而不考虑角色。可能是什么问题呢?如果有任何其他方法来实现这一点,请告诉我。提前谢谢!
答案 0 :(得分:3)
验证对于模型是永久性的。这种方式不起作用。
您需要创建自定义验证器:
Members.validateAsync('name', function(err, done){
var role = getRole();
if(role === 'admin'){
if(!this.name) err();
}
done();
}, {message: 'name should be filled'});
Members.validateAsync('age', function(err, done){
var role = getRole();
if(role !== 'admin'){
if(!this.age) err();
}
done();
}, {message: 'age should be filled'});