Javascript 如何使用axis将子查询添加到查询结果中
我正在基于Javascript 如何使用axis将子查询添加到查询结果中,javascript,sql,node.js,express,Javascript,Sql,Node.js,Express,我正在基于id查询对象表。然后,我想用我的结果id查询同一个表,并将其作为新属性添加到result对象中。希望,这是有道理的: app.get(`/details`, (req, res) => { const { id } = req.query; connection.query( `SELECT objects.* FROM objects WHERE id = ${id} LIMIT 1`, (err, results)
id
查询对象
表。然后,我想用我的结果id查询同一个表,并将其作为新属性添加到result对象中。希望,这是有道理的:
app.get(`/details`, (req, res) => {
const { id } = req.query;
connection.query(
`SELECT
objects.*
FROM objects
WHERE id = ${id}
LIMIT 1`,
(err, results) => {
if (err) {
return res.send(err);
} else {
let result = results[0];
result.relationships = [];
connection.query(
`SELECT
objects.*
FROM objects
WHERE relationship = ${result.id}`,
(err, rel_results) => {
if (err) {
return res.send(err);
} else {
rel_results.forEach((el) => {
result.relationships.push(el);
});
// This log looks fine. result.relationhips is an array of objects.
console.log(result);
}
}
);
// Here, the result has an empty array for result.relationhips
return res.json(result);
}
}
);
});
查看注释时,为什么日志中的结果正确,而返回中的结果不正确?您需要将return语句放在嵌套回调中,这是主要的 由于提前返回:
result.relationships = [];
connection.query(
`SELECT
objects.*
FROM objects
WHERE relationship = ${result.id}`,
(err, rel_results) => {
if (err) {
return res.send(err);
} else {
rel_results.forEach((el) => {
result.relationships.push(el);
});
// This log looks fine. result.relationhips is an array of objects.
console.log(result);
return res.json(result);
}
}
);
你根本不需要做出承诺。当结果在第二个查询回调中可用时,您只需发送结果即可:
(err, results) => {
if (err) {
return res.send(err);
} else {
let result = results[0];
result.relationships = [];
connection.query(
`SELECT
objects.*
FROM objects
WHERE relationship = ${result.id}`,
(err, rel_results) => {
if (err) {
return res.send(err);
} else {
rel_results.forEach((el) => {
result.relationships.push(el);
});
// This log looks fine. result.relationhips is an array of objects.
console.log(result);
res.json(result);
}
}
);
}
提示:使用承诺或异步等待。