[英]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.