路线:
app.get('/admin/cardapio', function(req, res) {
Produtos.find({}).exec(function(err, produtos) {
if (err) throw err;
res.render('admin/cardapio.ejs', { data: produtos});
});
});
表格:
<% for (var i = 0; i < data.length; i++) {%>
<tr>
<td><%= data[i]._id %></td>
<td><%= data[i].description %></td>
<td><%= data[i].type %></td>
<td><%= data[i].price %></td>
<td>EDITAR / REMOVER</td>
</tr>
<%}%>
Mongo DB结果:
{
"title" : "teste",
"description" : "teste",
"price" : "20",
"type" : "teste",
"_id" : ObjectId("5b2790f7f9f2ab37e813504d"),
"__v" : 0
}
当我在每行上仅使用data[i]
时,它会显示整个结果,但是如果我将.title
放在其中,则什么也不会显示,而当我从mongodb中放置_id
时正常显示
答案 0 :(得分:0)
Route .js
app.get('/admin/cardapio', function(req, res) {
Produtos.find({}, function(err, produtos) {
if (err){
console.log(err);
}else{
res.render('admin/cardapio.ejs', { data: produtos});
}
});
});
EJS文件
<% data.forEach(function(foundData, i){%>
<tr>
<td><%= foundData.title %></td>
</tr>
<%}%>
可以测试吗?
答案 1 :(得分:0)
使用 forEach 循环如下:
<% data.forEach(function(product){ %>
<tr>
<td><%= product.title %></td>
<td><%= product._id %></td>
<td><%= product.description %></td>
<td><%= product.type %></td>
<td><%= product.price %></td>
<td>EDITAR / REMOVER</td>
</tr>
<%})%>
,或者如果您想使用 for循环:
<% for (var i = 0; i < data.length; i++) {%>
<tr>
<td><%= data[i]["title"] %></td>
<td><%= data[i]["_id"] %></td>
<td><%= data[i]["description"] %></td>
<td><%= data[i]["type"] %></td>
<td><%= data[i]["price"] %></td>
<td>EDITAR / REMOVER</td>
</tr>
<%}%>
答案 2 :(得分:0)
MongoDB中"__v" : 0
的存在以及您正在使用的.exec()
方法意味着您正在将Mongoose用作ODM(您可以向我确认吗?)。
查询返回的结果不是JSON对象,而是Mongoose模型实例。这就是为什么您需要对结果调用.toJSON()
的原因:
res.render('admin/cardapio.ejs', { data: produtos.map(p => p.toJSON()) });
答案 3 :(得分:0)
尝试倾斜您的结果,它将猫鼬对象转换为通用json对象
app.get('/admin/cardapio', async (req, res) => {
try {
const products = await Produtos.find({}).lean();
res.render('admin/cardapio', {products});
}
catch (error) {
console.error(error);
res.status(500).send('Oops..');
}
});
EJS文件
<% products.forEach(function(product, index) { %>
<tr>
<td><%= product.title %></td>
<td><%= product.description %></td>
<td><%= product.type %></td>
<td><%= product.price %></td>
<td>
<a href="/path/to/edit/<%= product._id %>">EDITAR</a>
/
<a href="/path/to/delete/<%= product._id %>">REMOVER</a>
</td>
</tr>
<% }) %>