gpt4 book ai didi

javascript - NodeJS/Javascript 函数返回未定义

转载 作者:行者123 更新时间:2023-11-29 11:10:37 24 4
gpt4 key购买 nike

我正在使用 Node、Express 和 MySQL 编写一个基本的 Web 应用程序。它只是一个基本网站,用户可以在其中创建帐户、查看其他人的帐户并在他们的个人资料上发布信息,我创建它是为了学习 Node 和 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();

谢谢

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

最佳答案

回调来救援(最简单的答案)

您的查询正在异步执行,这意味着,当函数结束时,查询仍在执行,并且您的“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});
});
});

它应该工作得很好。关于回调/Promise/Observables 的研究

关于javascript - NodeJS/Javascript 函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com