2016-07-01 2 views
1

私は、Mongooseを使用してdb内の特定のユーザーを探して、同じデータが存在するかどうかに応じてデータを保存または無視しようとしています。Mongooseが見つかりませんでした。

しかし、私が送信したいHTMLがまだあるres.send()" "含まれているが、User.find()関数コールバック後の変数htmlに反映されている変更はありません。

これを解決する方法についてのご意見はありますか?

var html = ""; 
app.post('/', function(req, res){ 

    var name_of_user = req.body.username; 
    var userObject = new User({ 
     username: req.body.username, 
     email : req.body.email, 
     password : req.body.password 
    }); 

    User.find({"username" : name_of_user}, function(err,docs) { 
     if(docs.length) { 
      console.log('Name exists already'); 
      html = '<i>' + userObject.username + '</i> is already a registered user!'; 
      html += '<br><br><br><a href="http://localhost:3000/">Try again</a>'; 
     } 
     else { 
      userObject.save(function(err, user) { 
       if (err) return console.error(err); 
      }); 
      html = 'Successfully signed up as <i>' + name_of_user + 
       '</i>. Added <i>' + name_of_user + '</i> to the MongoDB database.'; 
      html += '<br><br><br><a href="http://localhost:3000/">Go back</a>'; 
     } 

     //console.log(docs); 
    }); 

    res.send(html); 

}); 
+0

私の回答があなたの問題を解決しましたか? – DAXaholic

答えて

0

res.send(html)はコールバックの外にあるため、コールバックが呼び出される前にコールされます。その結果に頼るためには、そのコールをコールバックに移動する必要があります。

User.find({"username" : name_of_user}, function(err,docs) { 
    if(docs.length) { 
     console.log('Name exists already'); 
     html = '<i>' + userObject.username + '</i> is already a registered user!'; 
     html += '<br><br><br><a href="http://localhost:3000/">Try again</a>'; 
     res.send(html); 
    } 
    else { 
     userObject.save(function(err, user) { 
      if (err) return console.error(err); 

      html = 'Successfully signed up as <i>' + name_of_user + 
        '</i>. Added <i>' + name_of_user + '</i> to the MongoDB database.'; 
      html += '<br><br><br><a href="http://localhost:3000/">Go back</a>'; 
      res.send(html); 
     }); 
    } 
}); 
関連する問題