2017-09-13 3 views
0

私はExpress、Node、Pugを使ってアプリケーションを構築しています。 Expressでは、私はGET books/:idのエンドポイントを持っています。私はミドルウェア機能のすべての本をつかんでいます。そして、私はそのビューをレンダリングします。ビューでは、すべての本をループし、1つの本の詳細のみを表示するのではなく、すべての本を表示します。 1つのブックの詳細ビューのみをレンダリングするにはどうすればよいですか?ここですべてのオブジェクトではなくPugで詳細ビューをレンダリングするにはどうすればよいですか?

// GET the book detail page 
router.get('/:id', (req, res, next) => { 
bookQuery = Book.findAll({ 
    include: [ 
     { model: Loan } 
    ], 
    order: [["title", "DESC"]] 
}).then((books) => { 
    console.log(books); 
    res.render('book_detail', { 
     books: books, 
     // title: loans.Book.title, 
     // author: loans.Book.author, 
     // genre: loans.Book.genre, 
     // first_published: loans.Book.first_published, 
     // patronFirstName: loans.Patron.first_name, 
     // patronLastName: loans.Patron.last_name, 
     // loanedOn: loans.loaned_on, 
     // return_by: loans.return_by, 
     // returned_on: loans.returned_on 

    }); 
}); 
}); 

を眺めです:

は、ここで詳細ページエンドポイントの

extends ./layout 
block content 
    body 
     each book in books 
      h1 Book: #{book.title} 
      form 
       p 
        label(for='title') Title 
        input#title(type='text', value=book.title) 
       p 
        label(for='author') Author 
        input#author(type='text', value=book.author) 
       p 
        label(for='genre') Genre 
        input#genre(type='text', value=book.genre) 
       p 
        label(for='first_published') First Published 
        input#first_published(type='text', 
value=book.first_published) 
       p 
        input(type='submit', value='Update') 
      h2 Loan History 
      table 
       thead 
        tr 
         th Book 
         th Patron 
         th Loaned on 
         th Return by 
         th Returned on 
         th Action 
       tbody 
        tr 
         td 
          a(href=`/books/book_detail`)= book.title 
         td 
          //- a(href=`/patrons/patron_detail`)=book.Loan.first_name + ' ' + book.Loan.last_name 
         if book.Loan 
          a(href='patron_detail.html') 
          td= book.Loan.loaned_on 
          td= book.Loan.return_by 
          td= book.Loan.returned_on 
          td 
           a.button(href='return_book.html') Return Book 
+0

なぜあなたはまず最初にその本を全部集めていますか?あなたはその「id」によって1冊の本だけを掴んでいない理由はありますか? –

+0

私は@AndrewMyersに同意しますが、「すべての本を手に入れて1つしかレンダリングしない」場合は、IDをpug条件付きで照合する必要があります(https://pugjs.org/language)。 /conditionals.html –

+0

@AndrewMyers私はSequelize ORMをこのプロジェクトに使用していますが、私が知っている限り、その関数内のすべての書籍を照会する必要がありますが、間違っている可能性があります。選択した書籍の本の詳細にユーザーをリダイレクトすることはできませんか?しかし、私の見解はどのようにそれを知っていますか – wellowlbe

答えて

1

これはパグとは何の関係もありません。 Pugはデータをレンダリングするだけです。

問題はBook.findAll()を使用していることです。これは書籍の配列を取得します。 シングル本を取得するには、Book.findOne()を使用してください。また、URLに提供されているIDを持つ書籍を見つけるには、where: { id: req.params.id }と指定する必要があります。

また、変数booksbookに変更することもできます。また、ビュー内のeach book in books行は不要です。

Model Usage section of the manualには、多くのクエリの例があります。上にリンクされているAPIリファレンスより読みやすくなっています。

関連する問題