0

我对NodeJSExpress很陌生,并且很难使用sqlite3 模块。

假设我有一个包含 2 个表的数据库:carscar_details
这是我正在尝试做的一个简单示例:

router.get('/get-car-info', (req, res) => {
    let car_details = [];
    let sql = '';
    let cars = ['audi', 'bmw', 'benz', 'honda', 'toyota];

    cars.forEach(car => {
        sql = `SELECT * FROM car_details WHERE name=${car}`;

        db.get(sql, function(err, data) {
            if (!err) {       
                car_details.push(data);
            }
        });
    });

    res.json({ 'success': true, 'cars': car_details });
});

这是一个基本示例,但足以描述问题。
由于db.get是异步请求,因此在循环完成时,响应为空,因为它在查询完成之前被调用。

如果只有一个查询就可以了,我会在其中发送响应,callback但不确定在出现循环/递归情况时如何实现。

提前致谢...

4

2 回答 2

0

您可以使用where in子句获取数据以获取更多详细信息,请访问此处

router.get('/get-car-info', (req, res) => {
      let car_details = [];
      let cars = ['audi', 'bmw', 'benz', 'honda', 'toyota];

      function inParam(sql, arr) {
        return sql.replace('?#', arr.map(() => '?').join(','))
      }

      db.get(inParam('SELECT * FROM car_details WHERE name in (?#)', car), car, function(err, data) {
        if (!err) {
          console.log(data)
          car_details.push(data);
        }
      });
 });
于 2019-05-17T18:16:15.817 回答
0

你可以做这样的事情..但请验证 car_details 结果,我希望每个db.get请求都直接返回数据..

   router.get('/get-car-info', async (req, res) => {
        let sql = '';
        let cars = ['audi', 'bmw', 'benz', 'honda', 'toyota];    
        let car_details = await Promise.all(cars.map(car => {
            sql = `SELECT * FROM car_details WHERE name=${car}`;
            return db.get(sql);
        }));

        res.json({ 'success': true, 'cars': car_details });
    });
于 2019-05-17T18:31:52.663 回答