1

我正在使用 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" } ]
4

1 回答 1

0

您不能在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);

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

res.render('index', { title: 'Members', books });    
于 2018-02-23T12:58:42.387 回答