繁体   English   中英

如何在一个 http 请求中使用节点呈现多个 mysql 查询

[英]How to render multiple mysql queries using node in one http request

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

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
    });
  });
});

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

我不确定您是否想要从两个表中检索数据的单个查询,或者您是否想要从 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 
       });
    });
  });
});

当您收到来自两个查询的响应时,您需要呈现您的页面。 您可以为此使用 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
  });

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM