繁体   English   中英

如何在节点js中为数据库应用程序同步编写代码

[英]How to make code synchronously in node js for database applications

我正在开发一个将城市添加到users_city表的API,以下是发布请求:

router.post("/users_city_new",function(req,res){
        var cities = req.body.city_id;
        var count = 0;
        var query = ""
        console.log(cities)
        if(req.headers.authorization != secret){
            res.json({"Error" : true, "Message" : "API Key is Missing or is Invalid"});
        }
        else {
          pool.getConnection(function(err, connection) {
          query1 = "DELETE FROM users_city WHERE user_id = "+mysql.escape(req.body.user_id);
          connection.query(query1,function(err,rows){
        if(err){
          console.log(err)
        }
        else{
          console.log("Success")
        }

        for(var i=0; i<cities.length; i++){
            var city = cities[i].city
            console.log(city)
            query = "INSERT INTO users_city (city_id,user_id) VALUES ("+mysql.escape(city)+","+mysql.escape(req.body.user_id)+")";
            connection.query(query,function(err,rows){
                count++
                console.log(count)
            });
       }
       connection.release();

        if(count == cities.length){
            console.log("executed")
            res.json({"Error" : false, "Message": "Inserted Successfully"})
        }
        else{
            console.log("executed")
            res.json({"Error" : true, "Message": "Error Inserting cities", "Count" : count})
        }

      });
  });

  }
});

以下是我的代码的输出:

[ { city: 1 }, { city: 3 } ]
Success
1
3
executed
1
2

我想让我的代码按照程序的流程运行。请帮助我解决此问题

提前致谢

请检查节点js中的异步和等待功能。 我已经为您提供了一个简单的示例代码。

router.post("/users_city_new", async function(req, res) { 
   // async function should be declared before awaiting

      let cities = req.body.city_id, count = 0, query = "";

      if(req.headers.authorization != secret){
          res.json({"Error" : true, "Message" : "API Key is Missing or is Invalid"});
      } else {
        try{
          query1 = "DELETE FROM users_city WHERE user_id = " + mysql.escape(req.body.user_id);

          // await function that returns promise
          // this waits until the execution
          let connection = await pool.getConnection();

          // Again 'await' waits until the execution
          let rows = await connection.query(query1);

          for(var i = 0; i < cities.length; i++){
              var city = cities[i].city
              console.log(city)

              query = "INSERT INTO users_city (city_id,user_id) VALUES ("+mysql.escape(city)+","+mysql.escape(req.body.user_id)+")";

              // wait for query to run
              let rows = await connection.query(query);

              // executed only when query runned
              count++;
              console.log(count);
         }

         connection.release();

          if(count == cities.length){
              console.log("executed")
              res.json({"Error" : false, "Message": "Inserted Successfully"})
          } else {
              console.log("executed")
              res.json({"Error" : true, "Message": "Error Inserting cities", "Count" : count})
          }

        }catch(e){
            // handle you are errors here
        }
      }
    })

我相信这会对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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