MySQL Node JS:选择查询结果到数组,并在其他函数中使用此数组



我需要获取用户信息并在所有文件中使用它,但是当我将其保存到数组或会话数组时 - 它显示未定义。

connection.query('SELECT * FROM users WHERE username = ? OR email = ? AND password = ?', [login, login, password], function (err, results) {
if (results.length > 0) {
req.session.username = results[0].username;
req.session.email = results[0].email;
req.session.password = results[0].password;
req.session.premium = results[0].premium;
req.session.created_at = results[0].created_at;
} else {
console.log("Error!");
}
});

数组和会话始终未定义...

req是我假设的函数变量/公共变量。 connection.query 是异步的。 回调始终是异步的,每个 REST API 都是异步的。

异步基本上允许函数回调与下一行代码一起运行。

req 没有返回任何值的原因是,在函数中实际分配 req 的值之前,它首先被打印出来。 如果您想将所有内容添加到 req,请按以下方式执行以下操作:

someFunctionYouHaveCreated: (req,res,type) => {
connection.query('SELECT * FROM users WHERE username = ? OR email = ? AND password = ?', [login, login, password], function (err, results) {
if (results.length > 0) {
req.session.username = results[0].username;
req.session.email = results[0].email;
req.session.password = results[0].password;
req.session.premium = results[0].premium;
req.session.created_at = results[0].created_at;
} else {
console.log("Error!");
}
DoSomething(req);
});
}
DoSomething: (req) => {
//Do something
}

或者,创建一个承诺,并根据承诺运行函数。 使用 promise.all 来分配值:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all,但我认为你不需要这种程度的复杂性。

最新更新