【问题标题】:How to print an array from js to an ejs template?如何将数组从 js 打印到 ejs 模板?
【发布时间】:2022-01-23 04:51:12
【问题描述】:

我正在开发一种数据库网站,您可以在其中搜索个人资料。

我正在尝试从数据库查询中打印数据,但我得到:[object Object]。

相关代码:

index.js

router.get('/profile/:name', function(req, res){

  db.query("SELECT name FROM people where name='Jack'",function(err,names){

    console.log(names);

    res.render('template', {person: names});
  });

  
});

模板.ejs

<h1>Profile of <%= person %></h1>

使用 console.log 我得到了我的预期:

[ RowDataPacket { name: 'Jack' } ]

如何在 中只打印姓名“Jack”?

【问题讨论】:

  • 模板只能显示字符串和数字等基元。它不能直接显示对象。因此,您需要在模板中准确添加可以显示对象的哪些属性以及您希望这些不同属性在 HTML 中的格式。

标签: javascript node.js arrays express ejs


【解决方案1】:

模板只能显示字符串和数字之类的内容,这些内容可以使用.toString() 方法直接转换为字符串(因为字符串是必须进入 HTML 的内容)。它不能直接显示一个对象。

当您尝试显示一个对象时,它会调用.toString() 并获取"[object Object]",这就是您看到所见的原因。

因此,您需要在模板中准确添加要显示的对象的哪些属性以及您希望这些不同属性在 HTML 中的格式。请参阅模板中的属性本身。我不知道您传递的数据的确切形式,但如果它是一个数组,那么您将不得不引用一个数组索引或在您的模板中创建一个迭代循环以显示数组中的所有名称。

如果您只想要数组中的第一个名称,并且该数组只是名称字符串的普通数组(而不是对象数组),您可以从这里进行更改:

res.render('template', {person: names});

到这里:

res.render('template', {person: names[0]});

然后,这将在列表中呈现该名字:

<h1>Profile of <%= person.name %></h1>

【讨论】:

  • db.query 结果为:[object Object] -> { name: 'Jack' }。我只想打印第二部分-> Jack。我尝试使用循环或引用属性,但没有奏效。
  • @Desesperado - 好吧,你的问题显示了这个[ RowDataPacket { name: 'Jack' } ],它是一个对象的数组,所以你必须使用数组语法,然后在数组中的第一项上使用.name
  • 但是如何从 db.query 中仅选择数组中的 .name?
  • @Desesperado - 查看我在答案末尾添加的内容。
  • 我已经尝试过了,但它不起作用。它使用 在网站上打印 {"name": "Jack"}
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 2012-01-26
  • 2018-02-09
  • 2019-05-27
  • 2022-01-10
相关资源
最近更新 更多