BookInstance list page

Next we'll implement our list of all book copies ( BookInstance ) in the library. This page needs to include the title of the Book associated with each BookInstance (linked to its detail page) along with other information in the BookInstance model, including the status, imprint, and unique id of each copy. The unique id text should be linked to the BookInstance detail page.

Controller

BookInstance list controller function needs to get a list of all book instances, populate the associated book information, and then pass the list to the template for rendering.

打开 /controllers/bookinstanceController.js . Find the exported bookinstance_list() controller method and replace it with the following code.

// Display list of all BookInstances.
exports.bookinstance_list = function(req, res, next) {
  BookInstance.find()
    .populate('book')
    .exec(function (err, list_bookinstances) {
      if (err) { return next(err); }
      // Successful, so render
      res.render('bookinstance_list', { title: 'Book Instance List', bookinstance_list: list_bookinstances });
    });
};

						

The method uses the model's find() function to return all BookInstance objects. It then daisy-chains a call to populate() 采用 book field—this will replace the book id stored for each BookInstance with a full Book 文档。

On success, the callback passed to the query renders the bookinstance_list (.pug) template, passing the title and bookinstance_list as variables.

视图

创建 /views/bookinstance_list.pug and copy in the text below.

extends layout
block content
  h1= title
  ul
    each val in bookinstance_list
      li
        a(href=val.url) #{val.book.title} : #{val.imprint} -
        if val.status=='Available'
          span.text-success #{val.status}
        else if val.status=='Maintenance'
          span.text-danger #{val.status}
        else
          span.text-warning #{val.status}
        if val.status!='Available'
          span  (Due: #{val.due_back} )
    else
      li There are no book copies in this library.

						

This view is much the same as all the others. It extends the layout, replacing the content block, displays the title passed in from the controller, and iterates through all the book copies in bookinstance_list . For each copy we display its status (color coded) and if the book is not available, its expected return date. One new feature is introduced—we can use dot notation after a tag to assign a class. So span.text-success will be compiled to <span class="text-success"> (and might also be written in Pug as span(class="text-success") .

What does it look like?

Run the application, open your browser to http://localhost:3000/ , then select the All book-instances link. If everything is set up correctly, your site should look something like the following screenshot.

BookInstance List Page - Express Local Library site

下一步

发现此页面有问题吗?

最后修改: , 由 MDN 贡献者

版权所有  © 2014-2026 乐数软件    

工业和信息化部: 粤ICP备14079481号-1