- Database : 하나 이상의 collection을 가질 수 있는 저장소
SQL에서 database와 유사- Collection : 하나 이상의 Document가 저장되는 공간
SQL에서 table과 유사
하지만, collection이 document의 구조를 정의하지 않음- Document : MongoDB에 저장되는 자료,
SQL에서 row와 유사하지만 구조제약 없이 유연하게 저장가능
JSON과 유사한, BSON을 사용하여 다양한 자료형을 지원Document - ObjectID
연결관리
스키마 관리
Populate
- Mongoose 패키지에서 Schema 클래스를 가져옴
- PostSchema 객체 생성
- 호출된 mongoose 패키지에 모델 함수를 사용하여 Post라는 이름으로 PostSchema와 함께 모델 함수에 전달하여 Post라는 모델을 만들어줌
그냥 뭐 이런게 있다
Create
Read
Update
Delete
- shortId에 값이 전달되지 않았을 때 default의 함수를 실행시켜 nanoid 패키지 활용
게시글 작성 - 작성 페이지 만들기
- query에 write 값이 있다면 posts/edit에 템플릿을 연결
게시글 작성 - POST 요청 처리하기
- 위에서 input과 textarea로 전달받은 title, content를 req.body 안에서 가져옴
- Post 모델을 사용해서 create로 모델 안에 document를 만들어줌
- await으로 Post create를 처리하게되면 MongoDB에 정상적으로 데이터 생성
- 데이터 생성 후에는 res.redirect('/')를 통해 페이지를 root로 이동시킴
게시글 목록 및 상세 - 게시글 목록 구현하기
- (왼쪽 파일) 포스트 경로로 접근 했을 때, 작성되어 있는 모든 게시글을 가져옴
- 그리고 posts/list에 방금 find한 전체 게시글을 전달
- (오른쪽 파일) each를 통해 각각의 포스트를 순환하며 하나씩 그려줌
- post의 shortId로 링크를 만듦. 링크 안의 내용은 포스트 게시글의 제목이 됨
- 화면이 그려졌을 때 제목(링크)을 클릭하면 post의 shortId 경로로 페이지가 이동
게시글 목록 및 상세 - formatDate 함수 추가하기
- 전달받은 date를 특정 포맷으로 변환해주는 dayjs 패키지를 활용한 함수
게시글 목록 및 상세 - 게시글 상세 구현하기
- (왼쪽 파일) shortId 경로로 들어 갔을 때 게시글 상세 페이지가 보여야함
- shortId를 path parameter로 받아 이를 이용해 게시글을 검색해서 그 결과를 post에 저장
- 이렇게 해서 찾은 포스트가 없다면 오류, 있다면 posts/view 라는 템플릿으로 post를 전달
- (오른쪽 파일) 게시글 제목, 작성자, 내용 등을 그려줌
게시글 수정 - 수정 페이지 만들기
- (왼쪽 파일) 상세 페이지에서 사용했던 shortId가 들어간 url을 만약 쿼리가 edit으로 들어오면, posts/edit 페이지로 post를 전달하며 페이지를 띄움
- (오른쪽 파일) post가 있는 경우에는 액션을 post.shortId라는 url로 보내고 있고, 없는 경우에는 작성하기 위한 url로 보냄(???)
게시글 수정 - 수정 요청 처리하기
- 위의 오른쪽 파일에 form에서 post의 shortId로 전달됐던 요청(post가 있을 때의)을 router에서 post 함수의 shortId 경로로 처리(??)
- shortId로 findOneAndUpdate를 통해 내용과 타이틀을 변경
게시글 삭제 - HTTP Delete 요청 전송 및 응답 처리
- http delete 요청 전송 및 응답 처리를 pug의 script를 통해 처리
- (왼쪽) 버튼을 클릭하면 deletePost 함수 수행(인자로 post.shortId 전달)
- (오른쪽) deletePost 함수를 pug의 script로 선언한 것
- shortId를 전달 받아서 post의 shortId 경로로 method delete로 요청을 전달(3번째줄)
게시글 삭제 - 삭제 요청 처리하기
- router의 delete 메소드를 사용해 delete 요청을 처리할 수 있음
- shortId를 parameter로 받아오고, Post.delete 를 이용해 shortId를 찾아 게시글 삭제
- limit은 perPage 부분
- total 은 총 게시글 수
- find 해줄 때 skip과 limit을 사용해서 몇 개의 게시글을 생략하고 검색할건지, 총 몇개를 검색할건지 하고 있음, sort를 사용해서 데이터 생성 시간을 역순으로 정렬(최근순으로)
- totalPage가 10개라고 치면, 1부터 10까지 순환하며 링크를 만들어준다고 보면 되는듯(??)