如何从猫鼬查询返回值



我正在研究一个注册部分,该注册部分在将数据输入到mongo之前会进行一些服务器端验证。 我对猫鼬很陌生,在将数据返回到完成所有注册过程的方法时遇到问题。

在我的机车控制器中,我有一个方法可以包装所有内容以启动注册过程。

auth = new Authenticator();
auth.signUp(this.req.body);

在我的身份验证对象注册中,只是在创建新用户之前验证数据。一个验证是数据库中没有创建重复的电子邮件。

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() 时,我可以看到用户,但这不允许我返回任何内容,除非它是机车返回响应对象。 但是我需要能够继续对数据进行处理。 我意识到我可能完全错了,所以如果我的设计不好,我需要解释如何更改它以与节点.js、快速和机车一起使用。

我已经阅读了猫鼬关于查询的文档(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
    }
  })
}

相关内容

  • 没有找到相关文章

最新更新