NodeJS 与 MySQL - 返回空白数组

Posted

技术标签:

【中文标题】NodeJS 与 MySQL - 返回空白数组【英文标题】:NodeJS with MySQL - Return blank Array 【发布时间】:2021-11-18 23:31:44 【问题描述】:

我已经初始化了一个数组“userTasklist”。我已经在 .map 函数中推送了这个数组中的对象。 .map 之后,我有控制台这个数组,但数组是空白的。

比我在 .map 函数中控制对象并且所有值都打印成功,但在 Array 中没有值。不知道为什么。

exports.allUserList = (req, res) => 
    let userID = req.params.userid;
    const ghusersQuery = "SELECT user_id, name, employee_code FROM users WHERE under_gh = ?";
    conn.query(ghusersQuery, [userID], (err, userdata) => 
        if (err) 
            res.send( message: err )
         else 
            if (userdata && userdata.length > 0) 
                let userTasklist = [];
                userdata.map((datauser) => 
                    var objtask = ;
                    const userDataQuery = "SELECT * FROM tasklist WHERE user_id = ?";
                    conn.query(userDataQuery, [datauser.user_id], (errnew, taskdata) => 
                        if (taskdata && taskdata.length > 0) 
                            objtask = 
                                userid: datauser.user_id,
                                tasklist: taskdata
                            
                            userTasklist.push(objtask);
                        
                    )
                )
                console.log(userTasklist)
                res.send( message: "user list fetched", userdata: userdata, tasklistdata: userTasklist )
             else 
                res.send( message: "Data not found!" )
            
        
    )

【问题讨论】:

userTasklist 在调用查询回调之前发送为空。我建议将运行查询用作Promise,这样您就可以await。 你能详细解释一下吗。我是NodeJS的新手 问题是,userDataQuery的函数是在userTasklist之后调用的。在avoiding this so called callback hell 上查看这篇文章:-) 【参考方案1】:

使用 mysql21 将查询作为 Promise 处理的简化解决方案。

exports.allUserList = async (req, res) => 
  const  userid  = req.params
  const users = await connection.query('SELECT user_id, name, employee_code FROM users WHERE under_gh = ?', [userid])
  if (!users.length)
    return res.send( message: "Data not found!" )
  
  // better fetch all relevant tasks in bulk
  const tasks = await connection.query('SELECT * FROM tasklist WHERE user_id IN (?)', [users.map(r => r.user_id)])
  res.send( message: "user list fetched", users, tasks )

【讨论】:

如果我需要批量数据,那么我的代码在没有异步和等待的情况下工作正常。我需要单独的数组中的数据。 你能展示一个预期结果的样本吗?您可以在应用程序中重新组织输出,但我通常会避免在循环中调用查询(例如 200 个用户的 200 个查询),因为这可能会导致一些严重的开销。 我在用户表中有组长和团队成员。团队成员每天 3 次添加任务列表 @12PM、3PM 和 6PM。现在组长看到最近 7 天的团队成员任务列表......所以我想先循环 7 天日期并列出在表格顶部,然后我想在下面显示 12PM、3PM 和 6PM 时间日期和之后我想在 的左侧显示登录组头的所有团队成员,这些团队成员从用户数组中获取(第一个查询执行),然后我想显示每个任务列表团队成员分别在 12PM、3PM 和 6PM 的时间...... 所以在 React 结束时我有第一个 .map() 函数 7 天,在这个循环中我有另一个用于列表团队成员的第二个 .map() 函数,之后我有第三个 .map()列出任务列表的函数。

以上是关于NodeJS 与 MySQL - 返回空白数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在nodeJS的mysql查询中将值推送到数组?

与 nodejs、mongoose 和 JSON 对象数组拼接

值未插入数组中,数组返回空白值

在返回的mysql结果中查找行数(nodejs)

我如何通过nodejs返回获取mysql json

NodeJs 从 MySQL 查询结果创建新数组