无法从db.query中发送响应



router.get('/detalle/(:id)', (req, res) => {
let vehiculo_base
db.query("select b.nombre, count(b.nombre) AS n_vehiculos from base AS b, vehiculo AS v where b.id = v.id_base AND b.id_flota = " + req.params.id , function(err, result){
if (err) throw err
vehiculo_base = result
})
res.send(vehiculo_base)
})

我想将多个查询结果添加到响应中,但变量vehiculo_base在db.query 之外未定义

db.query是异步函数,所以可以这样尝试。

router.get('/detalle/(:id)', (req, res) => {
let vehiculo_base
db.query("select b.nombre, count(b.nombre) AS n_vehiculos from base AS b, vehiculo AS v where b.id = v.id_base AND b.id_flota = " + req.params.id , function(err, result){
if (err) throw err
vehiculo_base = result
res.send(vehiculo_base)
})
})

第二进近

router.get('/detalle/(:id)', async (req, res) => {
let vehiculo_base
var vehiculo_base = await db.query("select b.nombre, count(b.nombre) AS n_vehiculos from base AS b, vehiculo AS v where b.id = v.id_base AND b.id_flota = " + req.params.id);
res.send(vehiculo_base)
})

您可以将此路由重写为

router.get('/detalle/(:id)', async (req, res) => {
try{
let vehiculo_base = await 
db.query("select b.nombre, count(b.nombre) AS n_vehiculos from base AS b, vehiculo AS v where b.id = v.id_base AND b.id_flota = " + req.params.id)
res.send(vehiculo_base);
}catch(error){
res.send(error);
}   
});

问题是查询是异步的,在同步执行后立即用res.send返回结果。

一旦结果可用,您就应该返回结果。

router.get('/detalle/(:id)', (req, res) => {
db.query("select b.nombre, count(b.nombre) AS n_vehiculos from base AS b, vehiculo AS v where b.id = v.id_base AND b.id_flota = " + req.params.id , function(err, result){
if (err) throw err
res.send(result)
})

})

您应该在将来添加日志以了解流,并阅读一些关于异步和同步执行的内容。以及javascript执行的工作原理。

最新更新