【发布时间】:2021-03-16 00:45:34
【问题描述】:
我可以检索 api 数据并 console.log 它,for 循环正确显示每个卡片 div 元素,但我无法获取每个项目的详细信息。
plant.js 控制器:
exports.postFindPlant = async (req, res) => {
const plantName = req.body.searchPlant;
const key = process.env.API_KEY;
const urlAPI = `https://trefle.io/api/v1/plants/search?token=${key}&q=${plantName}`;
try {
const response = await fetch(urlAPI);
const data = await response.json();
if (data.meta.total === 0) {
console.log('nada');
} else {
console.log(data.meta.total);
let plants = JSON.stringify(data);
res.render('plants', {
plants: plants,
pageTitle: 'Plants',
path: '/plants',
hasPlants: plants.length > 0
});
}
} catch (err) {
console.log(err);
}
};
plants.ejs:
<% for(var i=0; i < plants.length; i++) { %>
<div class="col s12 m4">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<img class="activator" src="<%= plants[i].image_url %>">
</div>
<div class="card-content">
<span class="card-title activator grey-text text-darken-4"><%= plants[i].common_name %><i class="material-icons right">MORE</i></span>
</div>
<div class="card-reveal">
<span class="card-title grey-text text-darken-4"><%= plants[i].common_name %><i class="material-icons right">CLOSE</i></span>
<p><%= plants[i].scientific_name %></p>
<p><a href="/plant-details/<%= plants[i].id %>">Plant Details</a></p>
</div>
</div>
</div>
<% } %>
【问题讨论】:
-
response.json()是否在您的控制器代码中返回 Object?然后你不能通过你的 for 循环中的索引访问它的值,除非它是一个 Array。 -
所以,检查
data(response.json的结果)的格式,循环并以正确的方式选择你想要的数据。喜欢而不是plants[0].scientific_name,也许应该是plants.data.scientific_name?请记住data和plants是相同的变量,但仅在您的代码中字符串化之后。 -
嗨卡西米尔,感谢您的帮助。将plants[i].scientific_name 更改为plants.data.scientific_name 会引发参考错误。当我 console.log(data) 返回一个带有对象数组的 obj 时
-
让植物 = JSON.stringify(data);控制台日志(植物);返回
{"data":[{"id":132808,"common_name":"Centipede tongavine", ... -
我已经发布了该问题的答案,它解释了您发布的问题的起源问题。