如何使用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); }