首页 > 解决方案 > Pug 能够从 mongo 数据库 Json 访问嵌套数组

问题描述

我正在尝试从 mongodb 对象输出数组依赖项。我已经尝试了几乎所有的东西,但不断得到未定义的长度。

我可以输出整个对象,但我想要每个依赖项的名称版本。

{ _id: 5c6eea28c6c23a15beb43419,
  Repo_id: [ 1 ],
  name: 'express-ibm',
  version: '0.0.0',
  dependencies: 
   [ { name: 'async', version: '2.6.1' },
     { name: 'body-parser@1.18.3', version: '1.18.3' },
     { name: 'cookie-parser@~1.4.3', version: '1.4.3' },
     { name: 'debug@~2.6.9', version: '2.6.9' },
     { name: 'express@~4.16.0', version: '4.16.4' },
     { name: 'http-errors@~1.6.2', version: '1.6.3' },
     { name: 'mongoose', version: '5.3.13' },
     { name: 'morgan@~1.9.0', version: '1.9.1' },
     { name: 'pug@2.0.0-beta11', version: '2.0.0-beta11' } ] }



// Display detail page for a specific Repo
exports.repo_search = function(req, res, next) {
    Repo.findById(req.params.id).populate('repo').exec(function(err, repo) {
        if (err) {
            return next(err);
        }
        if (repo == null) {
            // No results.
            var err = new Error('Repo copy not found');
            err.status = 404;
            return next(err);
        }

        console.log(repo);
        Repo.find().exec(function(err, list) {
            if (err) {
                return next(err);
            }
            res.render('repo_info_detail', {
                title : 'Repo Detail',
                repo  : repo,
                list  : list

                //  repo_dependencies: results.repo_search
            });
        });

    });
};

哈巴狗:

  extends layout

    block content

      p#demo

      h1 #[Repository Name :] #{repo.name}

      dd #[ IBM Github URL:]
        a(href='/'+repo.url) #{repo.url}
      dd #[ Repository ID:] #{repo._id}
      dd #[ Language Type:] #{repo.filetype}
      dd #[Repo ID :] #{repo.Repo_id}
      //dd #[dependencies: ] #{repo.dependencies.name}



      div(class='col')
      div(class='col-sm-8')
      p
      button.hidediv Hide dependencies
      button.showdiv Show dependencies
      .divdemo
        | Dependencies
        .button
        a#export(href='#', role='button')
          | Click On This Here Link To Export The Table Data into a CSV File

        div(class='col')
        div(class='col-sm-3')
          table
          thead
            tr: th Name
            tbody

              each d in repo
                tr
                td 
                dd #{repo}

标签: arraysnode.jsjsonmongodbpug

解决方案


repo是一个 javascript 对象,并且您使用点语法(例如repo.nameor repo.dependencies)正确地访问了它的属性。但是,repo.dependencies是一个对象数组。它没有name可以使用点语法访问的属性。相反,您必须遍历子对象并name依次访问它们的每个属性。

h1 Repository Name: #{repo.name}
dl
    dt IBM Github URL:
    dd #[a(href='/'+repo.url) #{repo.url}]
    dt Repository ID
    dd #{repo.Repo_id}
    dt Dependencies
    each dependency in repo.dependencies
        dd #{dependency.name} (v#{dependency.version})

查看pug tab interpolation的语法,看起来您在示例中使用不正确。

此外,请查看有关正确使用dd元素以及如何将它们与dt元素一起使用的文档。它们还必须是描述列表 ( dl) 元素的子元素:https ://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl


推荐阅读