如何将数组从 js 打印到 ejs 模板?

Posted

技术标签:

【中文标题】如何将数组从 js 打印到 ejs 模板?【英文标题】:How to print an array from js to an ejs template? 【发布时间】: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 中的格式。 【参考方案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"

以上是关于如何将数组从 js 打印到 ejs 模板?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ejs 模板中使用数组显示来自 mongo 的 json 数据?

如何使用 EJS 模板引擎将变量传递给内联 javascript?

如何在编写变量 ejs、node.js 时禁用默认修剪?

如何从给定 ID 获取用户信息并使用 Node.js 和 EJS 显示它[关闭]

如何将数据从猫鼬模型显示/渲染到 ejs 文件

如何将日期格式从对象的猫鼬数组更改为 ejs 视图上的字符串?