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까지 지속되지만 기본적으로 중복되어 있습니다.
할애!
점점 페이지가 생겨나는 것은 매우 즐겁다.
계속하다
Reference
이 문제에 관하여(Node.js, Express 노트 ⑤의 5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hat27/items/cd1dbcd694c3d1954a2e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
지난번과 같이 함수를 만들어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까지 지속되지만 기본적으로 중복되어 있습니다.
할애!
점점 페이지가 생겨나는 것은 매우 즐겁다.
계속하다
Reference
이 문제에 관하여(Node.js, Express 노트 ⑤의 5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hat27/items/cd1dbcd694c3d1954a2e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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},
}
);
어쨌든 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까지 지속되지만 기본적으로 중복되어 있습니다.
할애!
점점 페이지가 생겨나는 것은 매우 즐겁다.
계속하다
Reference
이 문제에 관하여(Node.js, Express 노트 ⑤의 5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hat27/items/cd1dbcd694c3d1954a2e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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.
Reference
이 문제에 관하여(Node.js, Express 노트 ⑤의 5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hat27/items/cd1dbcd694c3d1954a2e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)