EJS中循环语句中如何使用template?

How to use template in the loop statement in EJS?

我正在制作一个基于 Express 的 Node JS 项目,它通过使用 EJS 循环打印出一组给定数组中的特定元素数组。

app.get("/:animal", function(req,res) {
var animal = req.params.animal;
var cats = [
    { name : "Mittens", age : 7},
    { name : "Kitty", age : 11},
    { name : "Smoogy", age : 3}
];
var dogs = [
    { name : "Rusty", age : 14},
    { name : "Matt" , agee : 7},
    { name : "Holly" , age : 9}
]

res.render("abc.ejs", {animal : animal, cats : cats, dogs : dogs});

这是我的 2 个数组,我必须根据 animal 参数的值打印出其中的任何一个。我想在不为 EJS 文件中的猫和狗分别编写 forEach 循环的情况下执行此操作,而是想根据 animal 参数的值进行打印。怎么做? 我尝试使用嵌套的 <% %> 标签但没有用

将2个数组合二为一

var animals=cats.push(...dogs)
res.render("abc.ejs", {animal , animals });

我建议使用 javascript 中的对象来处理您的情况,如下所述

在你的路由文件中,不需要扩展名 ejs

router.get('/:animal', function(req, res) {
 var animal = req.params.animal;
 var cats = [ { name: 'Mittens', age: 7 }, { name: 'Kitty', age: 11 }, { name: 'Smoogy', age: 3 } ];
 var dogs = [ { name: 'Rusty', age: 14 }, { name: 'Matt', agee: 7 }, { name: 'Holly', age: 9 } ];

 var map = { cats: cats, dogs: dogs };

 res.render('abc', { animals: map[animal] });
});

ejs查看文件如下:

<table>
    <tbody>
<% animals.forEach(function(animal) { %>
    <tr>
      <td><%= animal.name %></td>
      <td><%= animal.age %></td> 
    </tr>
  <% }); %> 
</tbody>
</table>

然后点击端点,可以根据您的端口和主机进行更改 http://localhost:3000/dogs

http://localhost:3000/cats