분류 전체보기 (108) 썸네일형 리스트형 async-await, try-catch Book.find({})는 DB에 있는 모든 Book을 가져온다. 작업이 끝날때까지 대기하도록 async를 사용한다. await부분이 끝나기 전에는 res.render를 실행하지 않는다. 이때 error가 생기는 것을 잡아내기 위해 try-catch를 사용한다. Model and Schema MongoDB의 장점은 document를 줄여준다는 것. 우리는 MongonDB에게 우리의 데이터들이 어떻게 생겼는지 알려줘야 함 Model은 데이터를 의미, 데이터가 어떤 정보를 포함하는지가 Schema. 아래와 같이 Book.js를 만들어 model이 포함해야할 정보의 구조를 작성. 그리고 init.js 에서 ./models/Book을 불러온다. comment 기능을 추가하자. Comment.js 파일을 만들어 comment의 Schema를 작성 init.js에서 import하고, BookSchema의 마지막에 Comment key 추가. Comments key에 ObjectId value는 comment 마다 Id를 할당해서 해당하는 Book model에 매칭시킨다. MongoDB와 Mongoose, 그리고 dotenv https://www.mongodb.com/download-center/community MongoDB는 간단한 규칙으로 작업할 수 있는 데이터 베이스. 사용하기 쉽고 직관적으로 작동한다. 일단 MongoDB Campus Community도 함께 설치했다.(뭔지 잘 모름) 설치경로(C:\Program Files\MongoDB\Server\4.2\bin)에 가보면 mongod와 mongo가 있다. 이 둘을 실행시켜야 하나 봄. 연결에 문제가 생기면 이 둘이 돌아가고 있나 체크. 이제 Mongo를 JavaScript와 연결해야 하는데, 둘 사이에 Adapter가 필요하다. npm install mongoose db.js의 Fake DB를 지우고 아래와 같이 수정한다. 이제 controller에서 db를 불러.. GET/POST and ID Join, Login, Upload를 get과 post로 나눴다. 로그인 상태를 추가했다. id는 일단 1으로 했다. 기본 상태일 때는 Join, Log In이 보이지만, 회원에게는 Uplod, Profile, Log Out 버튼이 보인다. id를 받아 /users/:id를 반환하도록 userDetail을 함수로 만들었다. 같은 방법으로 bookDetail도 수정했다. bookDetail은 이제 함수이므로 bookDetail을 쓸 때는 뒤에 괄호를 붙인다. bookBlock에 링크를 걸었다. 정보를 누르면 bookDetail 페이지(books/:id)로 이동한다. 마찬가지로 bookDetail도 함수이므로 id 인자를 필요로 한다. 마지막으로, logout을 누르면 홈으로 돌아가도록 했다. https:/.. Fake DB and Mixin Home에 책의 정보를 표현해본다. 그러나 아직 책 데이터가 없기 때문에 가상의 DB를 만들어서 테스트한다. db.js를 만들어 책의 정보를 가상으로 만든다. globalControllers.js에서 db.js를 불러오고, home.pug를 불러올 때 fake db인 books를 함께 넣어준다. home.pug에서 books db에서 책을 하나씩 불러낸다. 아래와 같은 방법으로 books db의 책을 한 권씩 불러올 때마다 block을 추가한다. 책의 정보를 표현하는 것은 책마다 동일하므로, 불필요한 반복을 줄이기 위해 mixin을 사용한다. mixin은 partial처럼 코드를 분리하는 방법인데, partial과는 다르게 인자가 있다. mixins/bookBlock.pug를 만들어 반복되는 내용을 담는.. Books 지금까지 공부한 내용을 바탕으로 대규모로 수정했다. 추가로 book과 관련된 페이지들을 만들고 bookController, bookRouter를 추가했다. 아래와 같은 트리구조인데, 충분히 이해되었다면 아래 파일들 각각이 어떤 역할을 하는지 설명할 수 있다. NINEOCLOCK │ init.js │ app.js │ middlewares.js │ routes.js │ package.json │ README.md │ .gitignore │ node_modules(폴더) │ ├─controllers │ bookController.js │ globalController.js │ userController.js │ ├─routers │ bookRouters.js │ globalRouters.js │ userRou.. Pages - Join, Login, Edit profile, Search 페이지에 원하는 기능을 추가하기 위해 form을 사용한다. action은 form의 내용을 처리할 URL, method는 get/post /join의 경로로 접속하면 아래 내용이 실행된다. form 안에 5가지 input이 있고, 각각은 type, name 등을 포함한다. placeholder는 input box에 표시되는 내용이다. 카카오톡, 페이스북 등으로 로그인하는 socialLogin은 partial로 따로 처리해준다. Search의 경우, abc를 검색했을 때 나타나는 화면에는 [serching for: abc]를 표시하려고 한다. 이때 검색한 그 단어를 포함한 정보를 가져와야 한다. reqest object 안에는 query object가 있고, 그 안에 term이 검색한 단어이다. term을.. Checklist 이제 페이지를 하나씩 만들어야 한다. 이때 페이지의 목적에 따라 버튼, 입력창 등을 추가한다. 본격적으로 페이지를 만들기 전에 README.md 파일에 체크리스트를 추가하자 이전 1 ··· 8 9 10 11 12 13 14 다음