如何将多个RowDataPacket推入一个数组

时间:2019-08-16 09:38:58

标签: javascript mysql node.js

我从MySQL获取数据并将其推送到新的Array中,但是在我记录时将其推送。它没有任何数据。我使用for循环从数据库获取每个数据,但我不知道如何将RowDataPacket推入新的Array。

或者有什么方法可以将两个SQL合并到一条SQL行中?

router.get(`/find-users/:queryString`, function(req, res, next) {
  let queryString = req.params.queryString;
  db.query(
    `SELECT distinct userId from project WHERE keyword like "%${queryString}%"`,
    function(error, data) {
      if (error) {
        console.log(error);
      }
      // console.log(data);

      let userArray = [];
      for (let i = 0; i < data.length; i++) {
        db.query(
          `SELECT * FROM user WHERE loginId='${data[i].userId}'`,
          function(error, userData) {
            if (error) {
              console.log(error);
            } else {
              console.log("-----------------------");
              console.log(userData[0]);
              // userArray[i] = userData;
              userArray.push(userData[0]);
            }
          }
        );
      }
      console.log(`-------`);
      console.log(userArray);
      console.log(`-------`);
    }
  );
});

我必须像这样制作数组。

[ RowDataPacket {
    loginId: '박동찬',
    displayId: '107688875506148574770',
    name: '박동찬',
    bio: 'NO BIO',
  RowDataPacket {
    loginId: 'jaagupkymmel',
    displayId: '1156051',
    name: 'Jaagup Kümmel',
    bio: 'NO BIO' }
]

但是它只会这样返回

结果

-------
[]
-------

3 个答案:

答案 0 :(得分:1)

const {promisify} = require('util')
router.get(`/find-users/:queryString`, async function (req, res, next) {
    const query = promisify(db.query).bind(db);
    let queryString = req.params.queryString;
    const data = await query(`SELECT distinct userId from project WHERE keyword like "%${queryString}%"`)
    if (!data) {
        console.log("error");
    }
    // console.log(data);

    let userArray = [];
    for (let i = 0; i < data.length; i++) {
        const userData = await query(`SELECT * FROM user WHERE loginId='${data[i].userId}'`)
        if (!userData) {
            console.log("error");
        } else {
            console.log("-----------------------");
            console.log(userData[0]);
            // userArray[i] = userData;
            userArray.push(userData[0]);
        }
    }
    console.log(`-------`);
    console.log(userArray);
    console.log(`-------`);
});

答案 1 :(得分:0)

改为使用此

function(error, userData, fields)

,您将得到一个如此处https://www.w3schools.com/nodejs/nodejs_mysql_select.asp

所示的数组

请阅读sql注入和node.js Preventing SQL injection in Node.js

答案 2 :(得分:0)

除了上述答案,

[{
  RowDataPacket: {
    loginId: '박동찬',
    displayId: '107688875506148574770',
    name: '박동찬',
    bio: 'NO BIO',
    RowDataPacket: {
    loginId: 'jaagupkymmel',
    displayId: '1156051',
    name: 'Jaagup Kümmel',
    bio: 'NO BIO' }
    }
}]

json应该是键值对,否则将无法工作。