如果第一个查询返回值,则完成执行Node.js Express.js mongoDB

时间:2018-04-04 17:57:43

标签: node.js mongodb express

在开始之前,请注意我已经搜索了超过2个小时,答案很简单,我知道,但我无法让它工作。我是新来的表达节点mongodb,

MongoClient.connect(url, function(err, db) {
    if (err) {  
      res.status(err.status); // or use err.statusCode instead 
      res.send(err.message);
    }
    var usernameGiven = req.body.usernameGiven;
    //Select the database
    var dbo = db.db("notifellow");
    //run the query
    var query = { username: usernameGiven , friends: []};

    dbo.collection("users").findOne({ username: usernameGiven}, function(err, result) {
      if (err){
        res.status(err.status); // or use err.statusCode instead 
        res.send(err.message);
        console.log("Query Error Occured!");
      }
      else {
        if (result) {
          //Send the response
          res.send("EXISTS");
      //I WOULD LIKE TO EXIT IF THIS LINE EXECUTES
        }
      }
    });

    dbo.collection("users").insertOne(query, function(err, result) {
      if (err){
        res.status(err.status); // or use err.statusCode instead 
        res.send(err.message);
        console.log("Query Error Occured!");
      }
      else {
        if (result) {
          //Send the response
          res.send("CREATED 201");
        } else {
          res.send("Failed to insert");
        }
      }
    });
    db.close();
  });

我的目标是检查用户是否不存在给定的用户名,我想将其插入到数据库中。 我想退出,如果我的查询找到匹配并安排使insertOne不会执行。请赐教!!

2 个答案:

答案 0 :(得分:0)

一旦不使用async / await语法,就必须将调用嵌套到MongoDB,因此它们会串行执行。您还可以使用MongoClient.connect(url, function(err, db) { if (err) { res.status(err.status); // or use err.statusCode instead res.send(err.message); } var usernameGiven = req.body.usernameGiven; //Select the database var dbo = db.db("notifellow"); //run the query var query = { username: usernameGiven , friends: []}; dbo.collection("users").findOne({ username: usernameGiven}, function(err, result) { if (err){ res.status(err.status); // or use err.statusCode instead db.close(); console.log("Query Error Occured!"); return res.send(err.message); } if (result) { db.close(); return res.send("EXISTS"); } dbo.collection("users").insertOne(query, function(err, result) { if (err){ res.status(err.status); // or use err.statusCode instead db.close(); console.log("Query Error Occured!"); return res.send(err.message); } db.close(); if (result) { return res.send("CREATED 201"); } res.send("Failed to insert"); }); }); });之类的模块来实现此目的。

{{1}}

答案 1 :(得分:0)

试试这个

dbo.collection("users").findOne({ username: usernameGiven}, function(err, result) {
  if (err){
    //put the error logic
  }
  else {
    if (result) {
      //Send the response

      return result;
  }
  else{
        // if above if block fails it means that  user  does not exist
        //put the insert logic
    }
});