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

How to print an array from js to an ejs template?

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

我正在尝试打印来自数据库查询的数据,但我得到:[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});
  });

  
});

template.ejs

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

使用 console.log 我得到了我期望的结果:

[ RowDataPacket { name: 'Jack' } ]

如何在 <=%person%> 中只打印名字“Jack”?

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

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

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

如果您只需要数组中的名字,而该数组只是名称字符串的普通数组(不是对象数组),您可以更改为:

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

对此:

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

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

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