MySQL 查询 returns 在 NodeJS 端点只查询一行而不是所有行?
MySQL Query returns Just One Row instead of All Rows at NodeJS Endpoint?
我有这个 NodeJS 端点,它应该从 MySQL 数据库中获取对 post 编号 201 的所有回复。
http://mysite:3000/getreplies/201
这是创建端点的 NodeJS 代码;
app.get("/getreplies/:repliesId", audioposts.findReplies);
exports.findReplies = (req, res) => {
Audiopost.findByOpId(req.params.repliesId, (err, data) => {
if (err) {
if (err.kind === "not_found") {
res.status(404).send({
message: `Not found Replies with id ${req.params.repliesId}.`
});
} else {
res.status(500).send({
message: "Error retrieving Audiopost with id " + req.params.audiopostId
});
}
} else res.send(data);
});
};
这是 MySQL select 查询;
Audiopost.findByOpId = (repliesId, result) => {
sql.query(`
SELECT
ap.audioname,
ap.userid,
ap.audioid,
ap.title,
ap.likes,
ap.opid,
u.gavatar,
u.name,
u.email,
(
SELECT GROUP_CONCAT(t.tagname)
FROM entitytag et
LEFT JOIN tags t on t.tagid = et.tagid
WHERE et.audioid = ap.audioid
) tagname,
(
select count(*) from audioposts AS apost WHERE apost.opid = ap.audioid
) as replycount
FROM audioposts ap
LEFT JOIN users u ON u.id = ap.userid
WHERE ap.opid = ${repliesId}
`, (err, res) => {
if (err) {
console.log("error: ", err);
result(err, null);
return;
}
if (res.length) {
console.log("found audiopost: ", res[0]);
result(null, res[0]);
return;
}
result({ kind: "not_found" }, null);
});
};
查询本身似乎没问题。但为什么端点返回的只是第一个 MySQL 行而不是所有行?
Audiopost.findByOpId = (repliesId, result) => {
sql.query(`
SELECT
ap.audioname,
ap.userid,
ap.audioid,
ap.title,
ap.likes,
ap.opid,
u.gavatar,
u.name,
u.email,
(
SELECT GROUP_CONCAT(t.tagname)
FROM entitytag et
LEFT JOIN tags t on t.tagid = et.tagid
WHERE et.audioid = ap.audioid
) tagname,
(
select count(*) from audioposts AS apost WHERE apost.opid = ap.audioid
) as replycount
FROM audioposts ap
LEFT JOIN users u ON u.id = ap.userid
WHERE ap.opid = ${repliesId}
`, (err, res) => {
if (err) {
console.log("error: ", err);
result(err, null);
return;
}
if (res.length) {
result(null, res);
return;
}
result({ kind: "not_found" }, null);
});
};
我有这个 NodeJS 端点,它应该从 MySQL 数据库中获取对 post 编号 201 的所有回复。
http://mysite:3000/getreplies/201
这是创建端点的 NodeJS 代码;
app.get("/getreplies/:repliesId", audioposts.findReplies);
exports.findReplies = (req, res) => {
Audiopost.findByOpId(req.params.repliesId, (err, data) => {
if (err) {
if (err.kind === "not_found") {
res.status(404).send({
message: `Not found Replies with id ${req.params.repliesId}.`
});
} else {
res.status(500).send({
message: "Error retrieving Audiopost with id " + req.params.audiopostId
});
}
} else res.send(data);
});
};
这是 MySQL select 查询;
Audiopost.findByOpId = (repliesId, result) => {
sql.query(`
SELECT
ap.audioname,
ap.userid,
ap.audioid,
ap.title,
ap.likes,
ap.opid,
u.gavatar,
u.name,
u.email,
(
SELECT GROUP_CONCAT(t.tagname)
FROM entitytag et
LEFT JOIN tags t on t.tagid = et.tagid
WHERE et.audioid = ap.audioid
) tagname,
(
select count(*) from audioposts AS apost WHERE apost.opid = ap.audioid
) as replycount
FROM audioposts ap
LEFT JOIN users u ON u.id = ap.userid
WHERE ap.opid = ${repliesId}
`, (err, res) => {
if (err) {
console.log("error: ", err);
result(err, null);
return;
}
if (res.length) {
console.log("found audiopost: ", res[0]);
result(null, res[0]);
return;
}
result({ kind: "not_found" }, null);
});
};
查询本身似乎没问题。但为什么端点返回的只是第一个 MySQL 行而不是所有行?
Audiopost.findByOpId = (repliesId, result) => {
sql.query(`
SELECT
ap.audioname,
ap.userid,
ap.audioid,
ap.title,
ap.likes,
ap.opid,
u.gavatar,
u.name,
u.email,
(
SELECT GROUP_CONCAT(t.tagname)
FROM entitytag et
LEFT JOIN tags t on t.tagid = et.tagid
WHERE et.audioid = ap.audioid
) tagname,
(
select count(*) from audioposts AS apost WHERE apost.opid = ap.audioid
) as replycount
FROM audioposts ap
LEFT JOIN users u ON u.id = ap.userid
WHERE ap.opid = ${repliesId}
`, (err, res) => {
if (err) {
console.log("error: ", err);
result(err, null);
return;
}
if (res.length) {
result(null, res);
return;
}
result({ kind: "not_found" }, null);
});
};