如何使用node-mysql将MySql查询的结果保存在variables中
即时尝试保存MySql查询的结果在variables使用node-mysql模型和node.js所以我有这样的代码:
connection.query("select * from ROOMS", function(err, rows){ if(err) { throw err; } else { console.log(rows); } });
结果是:
[ { idRooms: 1, Room_Name: 'dd' }, { idRooms: 2, Room_Name: 'sad' } ]
所以我需要将这个结果存储在variables中,所以我尝试像这样:
var someVar = connection.query("select * from ROOMS", function(err, rows){ if(err) { throw err; } else { return rows; } }); console.log(someVar);
但不提前感谢任何帮助。
那么@Fadi, connection.query
是asynchronous的,这意味着当你打电话给你的console.log(someVar)
, someVar
还没有设置。
你可以做什么:
var someVar = []; connection.query("select * from ROOMS", function(err, rows){ if(err) { throw err; } else { setValue(rows); } }); function setValue(value) { someVar = value; console.log(someVar); }
你不能这样做,因为在node.js中,networkingI / O是asynchronous和非阻塞的。 因此,任何必须在查询完成后才执行的逻辑必须放在查询的callback中。 如果你有很多嵌套的asynchronous操作,你可以使用async
模块来帮助你更好的组织你的asynchronous任务。
作为已经给出答案的补充。
var **someVar** = connection.query( *sqlQuery*, *callback function( err , row , fields){}* ) console.log(**someVar**);
这个构造会返回一些这个连接的variables信息和他的SQL查询。 它不会从查询中返回值。
来自查询的值位于callback函数(err,row,fields)
这是你的答案,如果你想分配一个variablesRes.render:(但评论土耳其语)
//before define the values var tum_render = []; tum_render.title = "Turan"; tum_render.description = "Turan'ın websitesi"; //left the queries seperatly var rastgeleQuery = "SELECT baslik,hit FROM icerik ORDER BY RAND() LIMIT 1"; var son5Query = "SELECT baslik,hit FROM icerik LIMIT 5"; var query_arr = [rastgeleQuery, son5Query]; var query_name = ['rastgele', 'son5']; //and the functions are //query for db function runQuery(query_arr,sira){ connection.query(query_arr[sira], function(err, rows, fields) { if (err) throw err; var obj = []; obj[query_name[sira]] = rows; sonuclar.push(obj); if (query_arr.length <= sira+1){ sonuc(); }else{ runQuery(query_arr, sira+1); } }); } //the function joins some functions http://stackoverflow.com/questions/2454295/javascript-concatenate-properties-from-multiple-objects-associative-array function collect() { var ret = {}; var len = arguments.length; for (var i=0; i<len; i++) { for (p in arguments[i]) { if (arguments[i].hasOwnProperty(p)) { ret[p] = arguments[i][p]; } } } return ret; } //runQuery callback function sonuc(){ for(var x = 0; x<=sonuclar.length-1; x++){ tum_render = collect(tum_render,sonuclar[x]); } console.log(tum_render); res.render('index', tum_render); }