【发布时间】:2019-02-14 00:47:45
【问题描述】:
我正在开展一个私人项目,以创建我参加过的音乐会列表。
我有这些表:
- vi_concert(id、标题、日期、地点)
- vi_artist(id、name、perma)
- vi_location (id, name, perma)
- vi_artist_concert (artist_id, Concert_id)
我做了 2 个查询。一张是演唱会信息,一张是阵容信息:
router.get('/:id', (req, res) => {
var output = [];
// Get Concert Information
let concert = `SELECT c.date, c.title, l.name AS location
FROM vi_concert c
INNER JOIN vi_location l ON c.location=l.id
WHERE c.id = '${req.params.id}'`;
db.query( concert, (err, result) => {
if ( err ) throw err;
output.push(result);
});
let lineup = `SELECT a.name, a.perma
FROM vi_artist_concert ac
JOIN vi_artist a ON a.id = ac.artist_id
JOIN vi_concert c ON c.id = ac.concert_id
WHERE ac.concert_id = '${req.params.id}'`;
db.query( lineup, (err, result) => {
if ( err ) throw err;
output.push(result);
});
res.send(JSON.stringify(output));
});
当我调用 URL localhost:3000/concerts/1 时,我得到以下信息:
[ ]
但我想要这样的东西:
[
"concert": {
"date": "2019-02-16 19:30:00",
"title": "Fancy title",
"location": "Fancy location"
},
"lineup": [
{
"name": "Band 1",
"perma": "band-1"
},
{
"name": "Band 234",
"perma": "band-234"
}
]
]
【问题讨论】:
-
虽然我不记得 node.js mysql 客户端,但我敢打赌它是异步的,您需要将
res.send()调用嵌套在db.query回调中。使用 Promise 包装器可能会更容易。
标签: javascript mysql node.js