我正在做一个注册件,在将数据输入到mongo之前先进行一些服务器端验证。我是猫鼬的新手,无法将数据返回到完成所有注册过程的方法中。
在我的机车控制器中,我有一个包装所有内容以启动注册过程的方法。
auth = new Authenticator();
auth.signUp(this.req.body);
在我的auth对象内部,SignUp仅在创建新用户之前通过验证数据来运行。一种验证是数据库中没有创建重复的电子邮件。
this.signUpUser = function(user) {
if(this.isNotDuplicate(user.email) {
//continue doing whatever needs done to the data afterwards
} else {
response['error'] = True
response['response'] = "duplicate email"
}
}
我尝试的一种方法是寻找匹配并返回true或false的电子邮件。
this.isNotDuplicate = function(email) {
query = user.findOne({ 'email': email });
query.exec(function(error, user) {
if(error) {
console.log(error);
}
console.log(user);
return (user === null) ? false : true;
});
}
如果我在那里的数据库中传递一封电子邮件,则在使用console.log()时可以看到用户,但这不允许我返回任何内容,除非它是机车返回响应对象。但是我需要能够继续对数据进行处理。我意识到我可能完全错了,所以如果我的设计不好,我需要解释如何将其更改为与node.js,express和locomotive一起使用。
我已经阅读了有关查询的猫鼬的文档(http://mongoosejs.com/docs/queries.html)。在他们的示例中,他们使用console.log(),但是肯定有一种方法可以使用从其他地方的猫鼬获取的数据,而不仅仅是在猫鼬查询中。如果我的设计不好,那么建议如何更改?或者,我怎样才能从猫鼬查询中返回数据或使用另一个值?
您将需要进行this.isNotDuplicate
异步。尝试这样的事情:
this.isNotDuplicate = function(email, callback) {
var query = user.findOne({ 'email': email })
query.exec(function(err, user) {
if (err) {
console.log(err)
callback(err)
} else {
console.log(user)
cb(null, !!user)
})
}
然后在检查用户时:
this.signUpUser = function(user) {
this.isNotDuplicate(user.email, function(err, exists) {
if (err || exists) {
response['error'] = true
response['message'] = (exists) ? 'duplicate email' : 'error'
} else {
// continue doing whatever needs to be done
}
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句