簡體   English   中英

使用node.js將MongoDB數據傳遞到.ejs

[英]Passing MongoDB data into .ejs with node.js

路線:

        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 ,它將正常顯示

第一列中包含data[i]._id

路由.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>
    <%}%>

你可以測試嗎?

使用如下所示的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>
                  <%}%>

MongoDB中存在"__v" : 0以及您正在使用的.exec()方法意味着您正在將Mongoose用作ODM(可以向我確認嗎?)。

您的查詢返回的結果不是JSON對象,而是Mongoose模型實例。 這就是為什么需要對結果調用.toJSON()的原因:

res.render('admin/cardapio.ejs', { data: produtos.map(p => p.toJSON()) });

嘗試傾斜您的結果,它將貓鼬對象轉換為通用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>
<% }) %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM