来自mongodb数据库

时间:2018-02-23 12:52:42

标签: javascript node.js pug jade4j

我正在建立一个带有快递的书店应用程序,并使用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' });
     });
});

在记录模型之后,它记录了我的数据库中的所有书籍,但当我尝试使用jade文件中的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" } ]

1 个答案:

答案 0 :(得分:0)

您不能在jade文件中使用console.log,因为这应该是客户端脚本。你的"书籍"对象返回服务器,您的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 });