简体   繁体   English

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

[英]can't return a select query value using mysql and node js

I am new in node js, Now I am trying to set a return value of select query in mysql using node js....I am using node-mysql package... 我是节点js的新手,现在我正在尝试使用节点js在mysql中设置select查询的返回值....我正在使用node-mysql包...

example code 示例代码

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 is always undefined. retValue总是未定义的。 I know it is asynchronous call. 我知道这是异步调用。 anyone tell me how to set value for this variable. 有人告诉我如何为这个变量设置值。

Thanks Deepak 谢谢迪帕克

Since database query is an asynchronous opreation, your variable retValue has not been set yet at the time you call console.log(retValue) . 由于数据库查询是异步操作,因此在调用console.log(retValue)时尚未设置变量retValue

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

The retvalue will available only in scope, that your put in result secion. 重量值仅在范围内可用,您输入的结果为secion。 So you can make something like that to log your result: 所以你可以做类似的事情来记录你的结果:

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
});

Move the console.log inside function processRow(rows) so that it looks like console.log移动到function processRow(rows) ,使其看起来像

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

also change 也改变了

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

To

processRow(row);

The second parameter was unused. 第二个参数未使用。

i can't get the result out of scope...i want to assign and return the value like this 我无法从范围中得到结果...我想分配并返回这样的值

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

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

return retValue }; return retValue};

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM