【问题标题】:cannot send response out of db.query无法从 db.query 发送响应
【发布时间】:2022-09-27 16:56:14
【问题描述】:
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 中未定义
标签:
javascript
node.js
express
【解决方案1】:
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)
})
【解决方案2】:
您可以将此路线重写为
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);
}
});
【解决方案3】:
问题是查询是异步的,并且您在同步执行后立即返回带有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 执行的工作原理。