将 SQL 数据传递到 Express-passport auth 数组的正确执行顺序
Posted
技术标签:
【中文标题】将 SQL 数据传递到 Express-passport auth 数组的正确执行顺序【英文标题】:Correct execution order for passing a SQL data into an array for Express-passport auth 【发布时间】:2021-01-24 17:14:58 【问题描述】:我正在尝试将 SQL 查询的结果传递到数组中,以便使用 Passport 进行身份验证。当我尝试使用我的代码时,执行顺序似乎是错误的,因为在日志中 2 先于 1。因此,2
的日志语句为空,userinfo
以null
返回但当@987654324 @ 打印,它包含来自我的查询的数据。如何修复执行顺序以使此功能正常工作?
日志:
2
1 [对象对象]
代码:
let userinfo = []
await con.query("SELECT * FROM users WHERE username = '"+ username +"'", function (err, result, fields)
if (err) throw err;
//console.log(JSON.parse(JSON.stringify(result)))
setValue(JSON.parse(JSON.stringify(result)))
)
function setValue(val)
userinfo.push(val)
console.log(`1 $userinfo`)
console.log(`2 $userinfo`)
return userinfo
【问题讨论】:
【参考方案1】:似乎混合了 async/await 和回调,这可能会导致难以遵循执行顺序。
我建议重写代码块以使用异步/等待或回调。
这是一个潜在的重构:
let userinfo = [];
// Use callback to just return the result
const result = await con.query("SELECT * FROM users WHERE username = '"+ username +"'", function (err, result, fields)
if (err) throw err;
return result;
);
// Manipulate data outside of the callback
userinfo.push(JSON.parse(JSON.stringify(result)));
return userinfo;
【讨论】:
以上是关于将 SQL 数据传递到 Express-passport auth 数组的正确执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
将 SQL 数据传递到 Express-passport auth 数组的正确执行顺序
如何将所有数据库(快速)自 sql server 2008 express 传递到 sql server 2008 R2(无 express)