简体   繁体   中英

How to write serial execution of mysql queries in Nodejs

I am new to nodejs programming,i am writing some rest api calls in nodejs and mysql,i want to update my table through nodejs mysql queries but here i am facing some async callbacks issue.I want to execute queries serially.I tried promise also still same result

code:

    app.post("/storeData",function (req,response)
    {
        console.log(req);
        var note = req.body.note;
        var time = req.body.time;
        var userid = req.body.userid;
        var title = req.body.title;

        var data = {

            "code" : 0,
            "message" : "fail"
        };
        if(note!=null && time!=null && userid!=null && title!=null)
        {

            var flag = checkIdExist(userid);  // this one is executing async

                 if(!flag)
                  {
                      var query = "insert into todo values('',?,?,?,?)" ;
                      connection.query(query,[note,userid,title,time],function (err,rows,fields)
                      {
                          if(!err)
                          {
                              data.code = 200;
                              data.message = "success";
                          }
                          response.json(data);
                      });
                  }
              });

        }
        else
        {
            data.code = 0;
            data.message = "parameters are missing";
        }
function  checkIdExist(id)
{
   var query = "select * from todo where userid = ? ";
   connection.query(query,[id],function (err,rows,fields) {

       if(err)
       {
           return false
       }
       else if(rows.length == 0)
       {
           return false
       }
   });

  return true
}

ES6 has built in promise. Following is the demonstration on how you can use ES6 promise to run your code synchronously or serially.

app.post("/storeData", function(req, response) {
console.log(req);
var note = req.body.note;
var time = req.body.time;
var userid = req.body.userid;
var title = req.body.title;

var data = {

    "code": 0,
    "message": "fail"
};
if (note != null && time != null && userid != null && title != null) {

    var checkIdExist = function() {
        return new Promise((resolve, reject) => {
            checkIdExist(userid, resolve, reject); // this one is executing async  
        });
    }

    checkIdExist()
        .then((flag) => {
            if (!flag) {
                var query = "insert into todo values('',?,?,?,?)";
                connection.query(query, [note, userid, title, time], function(err, rows, fields) {
                    if (!err) {
                        data.code = 200;
                        data.message = "success";
                    }
                    response.json(data);
                });
            }
        })
        .catch((error) => {
            console.log(error.message);
        });
} else {
    data.code = 0;
    data.message = "parameters are missing";
}});
function checkIdExist(id, resolve, reject) {
var query = "select * from todo where userid = ? ";
connection.query(query, [id], function(err, rows, fields) {

    if (err) {
        reject(err.message)
    } else if (rows.length == 0) {
        resolve(false);
    }
});

resolve(true);}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM