Autorendetailseite
Die Autorendetailseite muss die Informationen über den angegebenen Author
anzeigen, der über den (automatisch generierten) Wert des _id
-Feldes identifiziert wird, zusammen mit einer Liste aller Book
-Objekte, die mit diesem Author
verbunden sind.
Controller
Öffnen Sie /controllers/authorController.js.
Fügen Sie die folgenden Zeilen am Anfang der Datei hinzu, um das Book
-Modul für die Autorendetailseite mit require()
einzubinden (andere Module wie "express-async-handler" sollten bereits vorhanden sein).
const Book = require("../models/book");
Suchen Sie die exportierte author_detail()
-Controllermethode und ersetzen Sie sie durch den folgenden Code.
// Display detail page for a specific Author.
exports.author_detail = asyncHandler(async (req, res, next) => {
// Get details of author and all their books (in parallel)
const [author, allBooksByAuthor] = await Promise.all([
Author.findById(req.params.id).exec(),
Book.find({ author: req.params.id }, "title summary").exec(),
]);
if (author === null) {
// No results.
const err = new Error("Author not found");
err.status = 404;
return next(err);
}
res.render("author_detail", {
title: "Author Detail",
author: author,
author_books: allBooksByAuthor,
});
});
Der Ansatz ist genau derselbe wie auf der Genre-Detailseite beschrieben. Die Routencontrollerfunktion verwendet Promise.all()
, um den angegebenen Author
und die zugehörigen Book
-Instanzen parallel abzufragen. Wenn kein passender Autor gefunden wird, wird ein Error-Objekt an die Express-Fehlerbehandlungsmiddleware gesendet. Wenn der Autor gefunden wird, werden die abgerufenen Datenbankinformationen mit der Vorlage "author_detail" gerendert.
Ansicht
Erstellen Sie /views/author_detail.pug und kopieren Sie den folgenden Text hinein.
extends layout
block content
h1 Author: #{author.name}
p #{author.date_of_birth} - #{author.date_of_death}
div(style='margin-left:20px;margin-top:20px')
h2(style='font-size: 1.5rem;') Books
if author_books.length
dl
each book in author_books
dt
a(href=book.url) #{book.title}
dd #{book.summary}
else
p This author has no books.
Alles in dieser Vorlage wurde in früheren Abschnitten demonstriert.
Wie sieht es aus?
Führen Sie die Anwendung aus und öffnen Sie Ihren Browser unter http://localhost:3000/
. Wählen Sie den Link All Authors und dann einen der Autoren. Wenn alles korrekt eingerichtet ist, sollte Ihre Seite ungefähr wie der folgende Screenshot aussehen.
Hinweis: Das Erscheinungsbild der Lebensspanne-Daten des Autors ist unschön! Wir werden das im abschließenden Abschnitt dieses Artikels angehen.
Nächste Schritte
- Kehren Sie zurück zu Express Tutorial Teil 5: Bibliotheksdaten anzeigen.
- Fahren Sie fort mit dem letzten Unterartikel von Teil 5: BookInstance-Detailseite und Herausforderung.