无法使用mysql和节点js返回select查询值

我在节点js新,现在我想设置一个返回值select查询在mysql中使用节点js ….我正在使用node-mysql包…

示例代码

var mysql = require('mysql'); var connection = mysql.createConnection({ host : "localhost", user : "root", password: "root123", database: "testdb" }); var retValue = undefined; var query = connection.query('SELECT * FROM tblData;'); query .on('error', function(err) { // Handle error, an 'end' event will be emitted after this as well }) .on('fields', function(fields) { // the field packets for the rows to follow }) .on('result', function(row) { // Pausing the connnection is useful if your processing involves I/O connection.pause(); processRow(row, function() { retValue = row; }); }) .on('end', function(row) { }); connection.end(); function processRow(rows) { retValue = rows; } console.log(retValue); 

retValue总是未定义的。 我知道这是asynchronous调用。 任何人告诉我如何设置这个variables的值。

谢谢迪帕克

由于数据库查询是asynchronous操作,因此在调用console.log(retValue)时,您的variablesretValue尚未设置。

 var retValue; var query = connection.query('SELECT * FROM tblData;'); query .on('error', function(err) { // Handle error, an 'end' event will be emitted after this as well }) .on('fields', function(fields) { // the field packets for the rows to follow }) .on('result', function(row) { // Pausing the connnection is useful if your processing involves I/O connection.pause(); processRow(row); console.log(retValue); //retValue is now set }) .on('end', function(row) { }); connection.end(); function processRow(rows) { retValue = rows; } console.log(retValue); // undefined, retValue has not been set yet 

retvalue将只在范围内可用,表示您的投入结果secion。 所以你可以这样logging你的结果:

 var connection = mysql.createConnection({ host : "localhost", user : "root", password: "root123", database: "testdb" }); var retValue = undefined; var query = connection.query('SELECT * FROM tblData;', function(err, results, fields) { console.log(results); // Here continue logic you needed with results from table }); 

function processRow(rows)移动console.log ,使其看起来像

 function processRow(rows) { retValue = rows; console.log(retValue); } 

也改变

 processRow(row, function() { retValue = row; }); 

 processRow(row); 

第二个参数是未使用的。

我不能得到范围的结果…我想分配和返回这样的值

fucntion()getResults {… … var retValue = undefined;

var query = connection.query('SELECT * FROM tblData;',function(err,results,fields){retValue = results;});

return retValue};

var ret = getResults(); 的console.log(RET);