gpt4 book ai didi

javascript - 在 Node.js res.render 中同时渲染两个不同查询的结果

转载 作者:行者123 更新时间:2023-12-01 01:31:05 25 4
gpt4 key购买 nike

我试图在一页中显示两个 SQL 查询的结果。我的代码位于 module.exports block 中,整个应用程序是用 Node.js Express 编写的。这会返回错误“无法读取未定义的属性‘长度’”。

var message = "some random text";
var res_points, res_types;
db.query(query, (err, result) => {
if (err) {
res.redirect('/');
}
res_points= result;
});
db.query(query2, (err, result) => {
if(err) {
res.redirect('/');
}
res_types = result;
});

res.render('index.ejs', {
title: message,
,points: res_points
,types: res_types
});

当我这样做时,它起作用了:

db.query(query, (err, result) => {
if (err) {
res.redirect('/');
}
res.render('index.ejs', {
title: message,
points: result
});
});

我做错了什么?或者更好地说,如何将这两个查询的结果传递到渲染函数中?

最佳答案

这里最简洁的方法是使用 PromisesPromise.all。为此,您需要将 db.query 包装在 Promise 中。

// You can use Util.promisify too
const queryWrapper = (statement) => {

return new Promise((resolve, reject) => {

db.query(statement, (err, result) => {
if(err)
return reject(err);

resolve(result);
});

});

};


app.get('/some-route', (req, res, next) => {
const message = "some random text";

Promise.all([
queryWrapper(query),
queryWrapper(query2)
])
.then(([points, types]) => {

res.render('index.ejs', {
title: message,
points,
types
});
})
.catch(err => {
console.error(err);
res.redirect('/');
})
});

注意:如果您使用 MySQL,mysql2 包提供 Promise 支持,因此您可以避免使用 Promise 包装器。

关于javascript - 在 Node.js res.render 中同时渲染两个不同查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53269069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com