在函数中使用node-mysql

umu*_*utm 5 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
Run Code Online (Sandbox Code Playgroud)

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

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

srq*_*inn 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);
});
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,没想到PHP(同步)方式似乎需要时间.非常感谢. (2认同)
  • 我也花了一段时间(我也来自 PHP)。所以你明白了吗? (2认同)
  • 是的,我想是的。实际上,它无需添加回调函数即可工作(这就是我认为的原因) query.on('result' 已经是一个回调。我尝试了很多事情并意识到我必须以异步方式思考所有事情,而不仅仅是函数和塑造所有代码就这样..:)再次非常感谢。 (2认同)