无法使用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);