简体   繁体   English

如何在带有EJS的Node.js / Express中引用两个MySQL查询?

[英]How Do I Reference Two MySQL Queries in Node.js/Express w/ EJS?

I'm having trouble passing the results of two MySQL queries to my templating engine (EJS). 我在将两个MySQL查询的结果传递到我的模板引擎(EJS)时遇到麻烦。 Here's a classic example how to do so with one query: 这是一个经典示例,如何使用一个查询执行此操作:

dbConn.query(sqlQuery, function (err, result) {
  if (err) throw err;    

  res.render('index', { 
    pageTitle: 'Index',
    pageID: 'index',
    qObj: result
    });
  });

It works like a charm. 它像一种魅力。 My index.ejs page receives qObj, and I can iterate the rows and display them as I see fit. 我的index.ejs页面收到qObj,我可以迭代行并按我认为合适的方式显示它们。 But I want to pass two queries, like so: 但是我想传递两个查询,例如:

res.render('index', { 
  pageTitle: 'Index',
  pageID: 'index',
  qObj1: result1,
  qObj2: result2
  });

But this won't work: 但这不起作用:

dbConn.query(sqlQuery1, function (err, result1) {
  if (err) throw err;    

  dbConn.query(sqlQuery2, function (err, result2) {
    if (err) throw err;    

    res.render('index', { 
      pageTitle: 'Index',
      pageID: 'index',
      qObj1: result1,
      qObj2: result2
      });

    });
  });

This either: 这要么:

var qry1;
var qry2;

dbConn.query(sqlQuery1, function (err, result1) {
  if (err) throw err;    
  qry1 = Object.assign({}, result1);
  });

dbConn.query(sqlQuery2, function (err, result2) {
  if (err) throw err;    
  qry2 = Object.assign({}, result2);
  });

res.render('index', { 
  pageTitle: 'Index',
  pageID: 'index',
  qObj1: qry1,
  qObj2: qry2
  });

The objects don't persist after the dbConn.query() method is called. 调用dbConn.query()方法后,这些对象不会持久存在。 My attempt to make deep copies didn't work. 我尝试制作深层副本没有用。 Can anyone suggest a workaround? 谁能建议解决方法? Thanks. 谢谢。

Update 更新资料

Here's how I solved it. 这是我解决的方法。 I removed instances of the following code: 我删除了以下代码的实例:

if (err) throw err;

Leaving this: 离开这个:

dbConn.query(sql1, function (err, qry1) {
  dbConn.query(sql2, function (err, qry2) {   
    res.render('index', { 
      pageTitle: 'Index',
      pageID: 'index',
      qry1: qry1,
      qry2: qry2
      });
    });
  }); 

It'll do, but I sacrificed exception handling in order for it to work. 可以,但是我牺牲了异常处理才能使其正常工作。 It also seems weird to call an object method within the same object method call, at least in this case. 至少在这种情况下,在同一对象方法调用内调用对象方法似乎也很奇怪。 I'll try the JSON option yBrodsky suggested, see if that helps. 我将尝试建议的JSON选项yBrodsky,看看是否有帮助。

Solved. 解决了。 See explanation in Update section. 请参阅“ 更新”部分中的说明。 Thanks for looking. 感谢您的光临。

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

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