我正在尝试从db运行select查询并打印结果。但即使我看到控制台中的结果我也没有在索引页面中看到。 (Hovewer我在控制台中看到了结果,但它也没有正确显示。我在db中有2行,但我看到每行有3行。因此控制台的结果是:2X3 = 6行。)我把关于控制台结果的截图问题的结尾。
app.js中的代码
app.use('/', routes, function(req, res){
pg.connect(connect, function(err, client, done){
if(err){
return console.error('errrr', err)
}
client.query('select * from recipes', function(err, result){
if(err){
return console.error('error running query', err);
}
console.log(result.rows);
res.render('index.njk', { recipes: result.rows});
done();
});
});
});
index.njk中的代码
<ul>
{% for name, item in recipes %}
<li>{{ name }}: {{ item.name }}</li>
{% endfor %}
</ul>
this is result of the console 你能帮我解决一下吗?
答案 0 :(得分:0)
看起来(通过控制台的图片)result.rows是一个数组数组,其中包含2个值。因此,在循环遍历index.njk中的值时,recipes是一个数组数组,不包含具有name属性的项。
如果您设置了食谱:result.rows [0]应提供快速修复:
res.render('index.njk', { recipes: result.rows[0]});
这允许你获取数组数组中的第一个元素,这是可以的,因为保存在内的数组只有1个元素(你实际想要的2个项目!)。您应该在执行此操作之前检查result.rows.length&gt; 0所以你不会越界并得到一个错误。
if(result.rows.length > 0) {
res.render('index.njk', { recipes: result.rows[0]});
}else {
console.log('No rows found in DB');
}
答案 1 :(得分:0)
我通过在index.js中使用以下代码块而不是使用app.js解决了我的问题。我不确定它是否正确但现在工作正常。如果方法不正确,请让我纠正。
router.get('/', function(req, res){
pg.connect(connect, function(err, client, done){
if(err){
return console.error('errrr', err)
}
client.query('select * from recipes', function(err, result){
if(err){
return console.error('error running query', err);
}
if(result.rows.length > 0) {
res.render('index.njk', { recordResult: result.rows});
console.log(result.rows);
}else {
console.log('No rows found in DB');
}
done()
});
});
});