Node.js - 从 sql 打印结果

Node.js - print result from sql

我正在尝试 运行 来自数据库的 select 查询并打印结果。但即使我在控制台中看到结果,我也没有在索引页面中看到。 (但是我在控制台中看到了结果,但它也没有正确显示。我在数据库中有 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 你能帮我解决一下吗?

似乎(通过您的控制台图片)result.rows 是一个包含 2 个值的数组。因此,在遍历 index.njk 中的值时,recipes 是一个数组数组,不包含具有名称属性的项目。

如果您设置食谱:result.rows[0] 应该可以提供快速修复:

res.render('index.njk', { recipes: result.rows[0]});

这允许您获取数组数组中的第一个元素,这没关系,因为其中包含的数组只有 1 个元素(您真正想要的 2 个项目!)。在执行此操作之前,您应该检查 result.rows.length > 0 这样您就不会越界并收到错误。

if(result.rows.length > 0) {
  res.render('index.njk', { recipes: result.rows[0]});
}else {
  console.log('No rows found in DB');
}

我已经通过在 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() 
    });
  }); 
});