我的node.js应用程序有问题。我正在连接数据库获取数据
let users = {};
let currentUser = "example"; // this variable changes every time a user connects
connection.query('SELECT * FROM users WHERE name="'+currentUser+'"', function (err, result) {
if (err) console.log(err);
users[currentUser] = result[0];
});
console.log(users[currentUser]);
当我试着 console.log
这个 result[0]
从函数内部返回:
RowDataPacket {
n: 11,
id: 'VKhDKmXF1s',
name: 'user3',
status: 'online',
socketID: 'JbZLNjKQK15ZkzTXAAAB',
level: 0,
xp: 0,
reg_date: 2018-07-16T20:37:45.000Z }
我想把mysql的结果放到 users.example
或者类似的,但是当我尝试代码时它会返回 undefined
. 所以我试过了 console.log(users[currentUser].id)
作为一个例子,它显示了一个错误
TypeError: Cannot read property 'id' of undefined
那么如何将结果中的数据放入变量中呢 users[currentUser]
?
3条答案
按热度按时间muk1a3rh1#
因为你正在使用回调,你的
console.log
在结果从数据库返回之前发生。此外,代码中还有一个类型user
->users
.旁注:在使用这段代码之前,先研究一下“sql注入”。您构建查询的方式为任何人访问您的数据库打开了大门。使用像这样的库
squel.js
或者knex.js
会帮助你避免这种情况。为了解释为什么事情按顺序发生,请看一下javascript事件循环。
oknwwptz2#
那么如何将结果中的数据放入变量users[currentuser]中呢?
正在发生。问题是如何测试它。
正确的测试方法是
console.log
在回调中function(err, result)
```function (err, result) {
if (err) console.log(err);
users[currentUser] = result[0];
console.log(users[currentUser]);
});
e4eetjau3#
connection.query是一个异步调用。在查询从数据库获取数据之前,将调用console.log。