将 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 的日志语句为空,userinfonull 返回但当@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 数组的正确执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数从 LINQ 查询传递到 SQL 视图?

将 SQL 数据传递到 Express-passport auth 数组的正确执行顺序

一次将多行传递到sql数据库时出错[重复]

将用户定义的表类型从 VBA 传递到 SQL

如何将所有数据库(快速)自 sql server 2008 express 传递到 sql server 2008 R2(无 express)

将参数从 CMD 文件传递​​到 SQL 脚本