【问题标题】: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 执行的工作原理。

        【讨论】:

          猜你喜欢
          • 2018-08-29
          • 1970-01-01
          • 2020-10-21
          • 2018-11-26
          • 1970-01-01
          • 1970-01-01
          • 2022-06-23
          • 2023-02-01
          • 1970-01-01
          相关资源
          最近更新 更多