【问题标题】:jade iteration through dataset object from mongodb database通过 mongodb 数据库中的数据集对象进行玉迭代
【发布时间】:2018-08-03 12:59:06
【问题描述】:

我正在使用 expressjs 构建一个书店应用程序并使用 mongodb 存储数据我有一个要显示到我的 index.jade 的书籍数据库,但我一直陷入无限循环

extends layout

block content
    .content
        each book in books
            .book
                img(src="/images/dumbk.png", width="150px", height="200px")
                h4.book-title #{book.title}
                h6.book-dtls Price: #{book.price} SDG
                p.book-desc #{book.description}
                a.btn.btn-primary.view(href="/books/details/1") View Book

这是我的 index.js

var express = require('express');
var router = express.Router();

var Book = require('../models/bookModel');

/* GET home page. */
router.get('/', /*ensureAuthenticated, */function(req, res, next) {
    Book.find({}, function (err, books) {
        if (err) {console.log(err);}
        var model = {books: books}

       console.log(model);
       res.render('index', /*{books: books},*/ { title: 'Members' });
     });
});

在记录模型后,它记录了我数据库中的所有书籍,但当我尝试使用玉文件中的 book.title 记录书名时,它不会呈现它们并继续运行无限循环

-console.log(book.title)
result was undefined

所以确定错误在循环和格式中

当我记录模型时,输出是

[ { _id: the id, title: "book title", author: "author", price: "10", description: "a book description", stock: "5", cover: "dumbk.png" } ]

【问题讨论】:

    标签: javascript node.js pug jade4j


    【解决方案1】:

    您不能在jade 文件中使用console.log,因为它应该是客户端脚本。您的“books”对象返回服务器,您的 console.log 稍后将在客户端执行时执行。试试这个(尽管有更好的方法):

    extends layout
    
    block content
        each book in books
            .book
                img(src="/images/dumbk.png", width="150px", height="200px")
                h4.book-title #{book.title}
                h6.book-dtls Price: #{book.price} SDG
                p.book-desc #{book.description}
                a.btn.btn-primary.view(href="/books/details/1") View Book
        script.
            const books = JSON.parse("!{JSON.stringify(books)}");
            console.log(books[0] && books[0].title);
    

    更新:根据你的 cmets,你甚至不想要这个,只是为了让你的 Jade 文件来渲染书籍。为此,您应该将 books 数组传递给渲染器选项:

    res.render('index', { title: 'Members', books });    
    

    【讨论】:

    • 我也使用这个公式来显示它们吗?因为我的问题是没有记录它们,而是显示它们
    • 嗯,不。这只是将数据(本例中为books 变量)传递给前端JavaScript 的一种方式。如果您的 book.title 没有在 h4.book-title 中呈现,那么情况就不同了。这是你的问题吗?
    • 它给出了一个错误“无法读取未定义的属性“长度””
    • 是的,我的问题是我的数据库中的 preoberties 没有在我的前端呈现
    • 非常感谢您挽救了一条生命 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多