跳过了Mongoose查询

时间:2014-08-14 12:53:58

标签: node.js mongodb mongoose

我在NodeJS中有一个函数可以查询Mongo。该功能是" checkForMatchingEmail"。

var result = checkForMatchingEmail(req.body.email);

if ( result === 1) { // something something }
else if ( result === 0) { // something something }

我想使用RESULT变量来决定下一步该做什么。 (向前端发送响应是否在DB中存在此类电子邮件)。

问题是对Mongo的查询似乎有点滞后,所以线程只是跳过它而if / else树没用,因为查询结果还没有。

怎么办?

编辑:

checkForMatchingEmail看起来像这样:

function checkForMatchingEmail(email) {
    var result = 0;

    User.findOne({email: email}, function(err,obj) {
        console.log("email is " + email);

        if (err) {
            return handleError(err);
        } else if (obj != null) {
            console.log("This email already exists." + obj);
            result = 1;
        } else if (obj === null) {
            result = 0;
            console.log("This email does not exist.");
        }
    });

    return result;
}

1 个答案:

答案 0 :(得分:1)

首先,node.js是异步和偶数。在此上下文中没有可以跳过的线程。

当通过mongoose查询mongodb时,您正在使用模型,我们假设User执行查询。典型的mongoose查询看起来像这样

User.find({ email : 'someone@example.com'}, function(err, user) {
  if (err) {
    // Do something with the err
  }

  // Here you have your query result
});

以您的代码示例为例,您应该使用回调参数扩展checkForMatchingEmail,您可以在其中处理结果

checkForMatchingEmail(req.body.email, function(result) {
  if ( result === 1) { // something something }
  else if ( result === 0) { // something something }
});

您可以阅读Mixu的Node书中的What is Node.js章节,该书解释了node.js中的异步执行。