我在我的一个模型中进行了async
验证,我在其中查询相关对象以验证它的存在。问题是请求在此验证时超时,服务器永远不会响应。
module.exports = function(Ip) {
// Required fields
Ip.validatesPresenceOf('server_id');
...
Ip.validateAsync('server_id', isExistingServer, {
message: 'invalid server'
});
function isExistingServer(err, done) {
var ServerModel = Ip.app.models.Server;
var self = this;
process.nextTick(function() {
ServerModel.findById(self.server_id, function(e, server) {
console.log(_.isNull(server));// this actually prints false
return _.isNull(server) ? err() : done();
});
});
}
};
答案 0 :(得分:3)
因为您需要执行done();
然后err();
答案 1 :(得分:1)
根据documentation,您应在done()
之后致电err
。这是文档中的示例:
User.validateAsync('name', customValidator, {message: 'Bad name'});
function customValidator(err, done) {
process.nextTick(function () {
if (this.name === 'bad') err();
done();
});
});
请注意,由于在致电err()
之前没有返回,因此也会调用done
。