NodeJS / Javascript函数返回undefined

时间:2016-11-16 22:44:47

标签: javascript mysql node.js express

我正在Node,Express和MySQL中编写一个基本的Web应用程序。它只是一个基本站点,用户可以在其中创建帐户,查看其他人的帐户,并在他们的个人资料上发布信息,我正在创建它以学习节点和JavaScript。 所以,我要创建用户列表,并且我创建了一个很好的函数来返回数据库中的所有用户。这是代码:

function getAllUsers() {
    var query = " \
    SELECT \
      id, username, email, password \
    FROM \
      users \
    ";
    connection.query(query, function(err, rows) {
        if (err) throw err;
        return rows;
    });
}

现在,我在这里使用这个功能:

router.get('/list', function(req, res) {
    var users;
    users = getAllUsers();
    res.render('user/list', {'title': 'Users', 'users': users});
});

但用户未定义。这是为什么?

我非常确定MySQL连接是否正常工作,但这是我如何连接它,以防万一它派上用场:

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'firstnodeapp'
});

connection.connect();

由于

---编辑--- 我想我还应该提一下,行是在getAllUsers()函数中定义的,但是一旦我返回它就不再定义了。

2 个答案:

答案 0 :(得分:1)

回拨救援(最简单的答案)

您的查询正在执行异步,这意味着,当函数结束时,查询仍在执行,而“users”变量结束时未定义。

这样做:

function getAllUsers(callback) {
    var query = " \
    SELECT \
      id, username, email, password \
    FROM \
      users \
    ";
    connection.query(query, callback);
}

router.get('/list', function(req, res) {
    getAllUsers(function(err, rows) {
          // Or better yet, respond with the correct html code
          if (err) throw err;

          res.render('user/list', {'title': 'Users', 'users': rows});
    });
});

它应该工作得很好。关于回调/承诺/可观察的研究

答案 1 :(得分:0)

你不忘记回来吗?

function getAllUsers() {
  ...

  var query_result = connection.query(query, function(err, rows) {
    if (err) throw err;
    return rows;
  });

  return query_result;
}