我正在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()函数中定义的,但是一旦我返回它就不再定义了。
答案 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;
}