【问题标题】:How to render multiple mysql queries using node in one http request如何在一个 http 请求中使用节点呈现多个 mysql 查询
【发布时间】:2019-07-31 12:59:10
【问题描述】:

我需要从不同的表中进行两个查询,我应该怎么做才能在新页面中输出数据。现在它正在处理一个查询。

exports.getAllImages = function () {
    return new Promise((resolve, reject) => {
        con.query("SELECT * FROM products WHERE product_group='TRENCH 
CONVECTORS'", function (err, result, fields) {
            if (err) reject(err);
            resolve(result);
        });
    });
}

//This is what i tried, but it does not work
router.get('/product/:id', async function(req, res, next) {
  let filesFromFolder;
  let allimages
  database.retreaveImage(req.params.id).then(function(value) {
    filesFromFolder = value;

  });
  database.getAllImages().then(function(value){
    allimages = value;
  })

  res.render('product.ejs', {
    productName: req.params.id,
    data: filesFromFolder,
    allimages: allimages
  });
});

//This code works, and i am using it now
router.get('/product/:id', async function(req, res, next) {
  let filesFromFolder;
  database.retreaveImage(req.params.id).then(function(value) {
    filesFromFolder = value;
    res.render('product.ejs', {
      productName: req.params.id,
      data: filesFromFolder
    });
  });
});

我应该如何编辑代码来执行两个查询?

【问题讨论】:

标签: javascript mysql node.js express


【解决方案1】:

当您收到两个查询的响应时,您需要呈现您的页面。 您可以为此使用 Promise.all() 方法。

Promise.all([
  database.retreaveImage(req.params.id),
  database.getAllImages()
]).then(resultArr => {
  filesFromFolder = resultArr[0];
  allimages = resultArr[1];

  res.render("product.ejs", {
    productName: req.params.id,
    data: filesFromFolder,
    allimages: allimages
  });

});

【讨论】:

    【解决方案2】:

    我不确定您是否想要从两个表中检索数据的单个查询,或者您是否想要从 2 个表中获取 2 个不同的查询...如果是第二个,您可以连接函数以获得线性数据流

    //This code works, and i am using it now
    router.get('/product/:id/:temp', async function(req, res, next) {
      let filesFromFolder;
      database.retreaveImage(req.params.id).then(function(value) {
    
        var filesFromFolder = value;        
    
        //Using a temp function
        database.retreaveTemp(req.params.temp).then(function(value_temp) {
    
            var filesFromTemp = value_temp;
    
            res.render('product.ejs', {
               productName: req.params.id,
               data: filesFromFolder,
               dataTemp: filesFromTemp 
           });
        });
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2019-05-06
      相关资源
      最近更新 更多