如何在Node.js/Express w/EJS中引用两个MySQL查询



我在将两个MySQL查询的结果传递给我的模板引擎(EJS(时遇到了问题。这里有一个经典的例子,如何使用一个查询做到这一点:

dbConn.query(sqlQuery, function (err, result) {
if (err) throw err;    
res.render('index', { 
pageTitle: 'Index',
pageID: 'index',
qObj: result
});
});

它就像一个符咒。我的index.ejs页面接收qObj,我可以迭代这些行,并根据需要显示它们。但我想传递两个查询,如下所示:

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

但这行不通:

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

这要么:

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

在调用dbConn.query((方法后,对象不会持久存在。我试图进行深度复制,但没有成功。有人能提出解决办法吗?谢谢

更新

以下是我解决它的方法。我删除了以下代码的实例:

if (err) throw err;

离开这个:

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

确实可以,但为了让它工作,我牺牲了异常处理。在同一对象方法调用中调用一个对象方法似乎也很奇怪,至少在这种情况下是这样。我将尝试yBrodsky建议的JSON选项,看看这是否有帮助。

已解决。请参阅更新一节中的说明。谢谢你的光临。

最新更新