Node.js, Express 노트 ⑤의 5

4192 단어 Node.jsExpress.js
요즘 너무 추워요.황금 주간은 내일부터 계속 비가 올 것 같다.안녕하세요.
이번에는 Part5의 다섯 번째 하위 페이지입니다.
https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/Displaying_data/Book_list_page
왜냐하면 지금부터 똑같은 게 계속 똑같은 걸로 귀결돼서 하는 거예요?태그 요소의 표시 속성을 수정합니다.

장부 페이지 목록 보기


완성품은 코코아.

여기에 책의 목록과 작가의 목록을 표시하면 된다.
mongoDB의 Books를 보면 작가는 당연히 다른 시계의 id를 쓰고 있다.

따라서 도서 목록의 각 요소의 author.id를 author표에서 바꾸면 됩니다.

bookController의 book_list


지난번과 같이 함수를 만들어pug 파일을 만듭니다.
exports.book_list = function(req, res, next){
    Book.find({}, "title author").populate("author").exec(function(err, list_books){
        if(err){return next(err);}
        res.render("book_list", {title: "Book List", book_list: list_books});
    });
};

여기는 아직 좀 알 수 없는 곳이 있다.
나는find가 검색이라고 생각하지만, 첫 번째 매개 변수는 필터라고 생각한다.
두 번째 파라미터의 "title author"는?
약간 몽구스 모델.find()
https://mongoosejs.com/docs/api.html#model_Model.find Model.find(conditions<object>, projection<object|string>, options<object>, callback<function>)예.
·conditions
{} 에 필터가 있는 것 같습니다.{name: "john"} 등
・projection
그래요? select 같아요.sql로 말하다SELECT title, athour FROM books 그렇구나!
・option
조건인 것 같습니다.
・callback
여기는 function을 넣어야 할 것 같은데 아직 주사를 맞지 않았어요.

populate


네.이거 아직 모르겠어!
나는 먼저 문서를 붙였다.
https://mongoosejs.com/docs/populate.html
설명에 따르면 다른 소장품을 참조할 수 있는 대체 수단이 된다면.
예를 들어 모델의 모델에 설정된 것 같아서 책의 모델을 읽어 보세요.author: {type: Schema.Types.ObjectId, ref: "Author", required: true}여기 리프가 그 모양이야.
문자열로 설정했기 때문에 여기와 일치한다고 생각합니다.
models/author.js
//一番最後のマッピング部分
module.exports = mongoose.model("Author", AuthorSchema);
var AuthorSchema = new Schema(
    {
    first_name: {type: String, required: true, max: 100},
    family_name: {type: String, required: true, max: 100},
    date_of_birth: {type: Date, default: Date.now},
    date_of_death: {type: Date, default: Date.now},
    }
);
author의 정의는 이것이기 때문에books.author.first_name도 가능한가요?내 생각엔
exec 안의 function 이것도 잘 모르겠어요.

res.render


어쨌든 function의 두 번째 매개 변수list_책들은 책의 모델과 첨부된author의 모델을 포함한다고 가정합니다.
들어오셨죠?
그럼 책_list.pug에서 사용할 수 있는 속성은book.title book.summary book.isbn book.genre book.url<함수book.author.first_name book.author.family_name book.author.date_of_birth book.author.date_of_death하계.
genre도 인용됐는데 어떻게 처리했나요?둘 다 원하는 상황에서?
두 글자를 연결할 수도 있을 것 같습니다.Book.find({}, "title author").populate("author").populate("genre").exec(function(err, list_books))pug에 책이 있어요.genre에 대상이 표시됩니다.
하지만 원하는 느낌을 받지 못했다.author에 비해genre는 배열되어 있습니까?그런 느낌도 있고요.
나는 네가 와서 볼 수 있기를 바란다.

book_list.pug


현재, 우리는pug 파일을 만들어서 그것을 렌더링할 것입니다.
extends layout

block content
  h1= title

  ul
    each book in book_list
      li
        a(href=book.url) #{book.title} 
        | (#{book.author.name})


    else
      li There are no books.
위쪽은 정형문에서 블록의 콘텐츠를 대체하기 위해 레이아웃을 계승하는 기술입니다.
이번에는 포의 부분을 포함했다.each문이야?
#{} 은(는) #{속성(virtual 함수?)}입니다.이런 용도도 있어요.
그러면 Part5는 그 후에 12까지 지속되지만 기본적으로 중복되어 있습니다.
할애!
점점 페이지가 생겨나는 것은 매우 즐겁다.
계속하다

좋은 웹페이지 즐겨찾기