[英]How to push multiple RowDataPacket into one Array
I got a data from MySQL and push it into new Array but it when I log it. 我从MySQL获取数据并将其推送到新的Array中,但在我记录时将其推送。 It doesn't have any data.
它没有任何数据。 I use for loop to get each data from DB and I don't know how to push RowDataPacket into new Array.
我使用for循环从数据库获取每个数据,但我不知道如何将RowDataPacket推入新的Array。
Or is there any way to combine two SQL into one SQL line? 还是有什么方法可以将两个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(`-------`);
}
);
});
I have to make array like this. 我必须像这样制作数组。
[ RowDataPacket {
loginId: '박동찬',
displayId: '107688875506148574770',
name: '박동찬',
bio: 'NO BIO',
RowDataPacket {
loginId: 'jaagupkymmel',
displayId: '1156051',
name: 'Jaagup Kümmel',
bio: 'NO BIO' }
]
But it only returns like this 但是它只会像这样返回
Result 结果
-------
[]
-------
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(`-------`);
});
use this instead 用这个代替
function(error, userData, fields)
and you get an array like shown here https://www.w3schools.com/nodejs/nodejs_mysql_select.asp 你会得到一个像这里显示的数组https://www.w3schools.com/nodejs/nodejs_mysql_select.asp
And please read up on sql injection and node.js Preventing SQL injection in Node.js 并且请阅读有关SQL注入和node.js的信息,以防止在Node.js中进行SQL注入
in addition to above answer, 除了以上答案之外,
[{ RowDataPacket: { loginId: '박동찬', displayId: '107688875506148574770', name: '박동찬', bio: 'NO BIO', RowDataPacket: { loginId: 'jaagupkymmel', displayId: '1156051', name: 'Jaagup Kümmel', bio: 'NO BIO' } } }]
the json should be key value pair other it wont work. json应该是键值对,否则将无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.