在函数中使用node-mysql

时间:2012-11-13 16:19:28

标签: mysql node.js

我对nodejs很新,并且有一个问题。

尝试创建一个函数,该函数将调用我从表中提及其ID的任何字段的值:

function getUserInfo (userID, dynamicField) {
    var query = connection.query('SELECT '+dynamicField+' from users WHERE userID = '+connection.escape(userID));
    query.on('result', function(row) {
        return(row.dynamicField);
    });
};
console.log(getUserInfo(8, userEmail)) //this should get me the userEmail value of the user with userID=8

然而,我得到“未定义”。如果我使用console.log而不是return,它会记录该值,但这不能用作在其他函数中使用的函数来获取值。

如果我可以获得修改功能的帮助,我将很高兴。

1 个答案:

答案 0 :(得分:11)

这是async / nodejs初学者中常见的错误。你基本上在同步函数中包含了一个异步函数,它打破了节点事件循环的本质。返回表达式需要用回调替换。见下文:

// Method
function getUserInfo (userID, dynamicField, callback) {
    var query = connection.query('SELECT '+dynamicField+' from users WHERE userID = '+connection.escape(userID));
    query.on('result', function(row) {
        callback(null, row.dynamicField);
    });
};

// Implementation
getUserInfo(8, userEmail, function(err, result){
    console.log(err || result);
});

按照惯例,在Nodejs中,我们总是首先在回调中传递一个错误对象。在这种情况下,由于没有要捕获的错误,我们在其位置传递null。