작업 노트
게시판 검색 - 작성자 본문
전체 소스코드 : https://github.com/imtaekh/my_app/tree/fd1d5067155e2fb839e609e09e22b499355fee19
테스트 사이트 : https://azure0777board.herokuapp.com
작성자 검색 기능을 추가했습니다.
작성자 검색기능은 두가지로, 작성자 이름의 일부가 일치하는 경우(author)와, 작성자 이름이 완전히 일치하는 경우(author!)로 searchType을 나눴고,
body, title과는 다르게 author와 author!는 혼용할수 없습니다.
즉 searchType은 아래의 조합이 가능합니다.
body | title | author | author! |
body,title | body,author | body,author! | title,author |
title,author! | body,title,author | body,title,author! |
|
각각 타입에 or 로 검색을 하게 됩니다.
searchType=body,title,author!&searchText=test를 예로 들면 body에 "test"가 포함되거나, title에 "test"가 포함되거나, author이름이 정확히 "test"인 경우를 모두 출력하게 됩니다.
query상으로는 이렇지만, front end에서 지원하는 것은 title+body, title, body, author 4가지 입니다.
author!는 나중에 작성자 이름을 클릭해서 검색하게 할 예정입니다.
작성자 검색은 작성자를 먼저 검색한 후, 작성자 아이디를 얻어서 게시물에 작성자 아이디가 일치하는 게시물을 표시하는 방식으로 진행합니다.
mongodb 3.2부터 sql의 join에 해당하는 $lookup이 생겼는데.. 우리가 쓰고 있는 mongolab.com은 아직 버전이 3.0이라 안되더라구요 ㅠㅠ
3.2쓰시는 분은 $lookup으로 해보세요.
routes/post.js 입니다.
작성자 검색 query를 저장하는 항목(findUser)과 게시물 검색 query를 저장하는 항목(findPost)를 따로 출력합니다.
7번째 줄 : User검색도 하기 때문에 User 모델을 Post에도 넣어줘야 합니다.
21 - 36번째 줄 : search.findUser가 null인 경우에는 이 부분을 생략합니다. 아니면 유저를 찾아서 findPost에 더해줍니다.
37, 45번째 줄 : search.findUser가 있지만 search.findPost가 초기값({})인 경우에는 검색 결과가 없는 것으로 치고 Post검색을 하지 않습니다.
title이나 body 검색이 하나라도 있는 경우에는 {$or:[...]}로 되기 때문에 $or이 있는지 없는지로 확인 가능합니다.
52 - 56번째 줄 : 원래 Post검색 안에 있었던 것을 다음 함수로 뺐습니다. 유저를 못찾게 되면 Post 검색을 생략할 수도 있기 때문이죠.
이 부분이.. 어떻게 하면 더 깔끔하고 이해하기 쉽게 코딩할 수 있을까 고민을 많이 해봤는데... 답을 못찾았습니다.. 맘에 들지 않는 코드입니다. ㅠㅠ
views/posts/index.ejs 입니다.
searchType이 author!인 경우에는 검색기능을 더이상 조작하지 못하게 각각 항목에 disabled를 넣었습니다.
106 - 108번째 줄 : 검색인 경우 검색버튼 옆에 취소 버튼을 넣어서 게시판으로 돌아갈 수 있게 했습니다.
검색 결과.
다음 포스팅은 검색결과를 더 쉽게 파악할 수 있도록 검색결과에 검색 단어를 highlight하는 기능을 추가하겠습니다.
'javascript > w3schools nodejs' 카테고리의 다른 글
게시판 조회수, 게시물 번호 추가 (0) | 2017.02.23 |
---|---|
게시판 검색 - 검색어 하일라이트 (0) | 2017.02.23 |
게시판 검색 기능 (0) | 2017.02.23 |
페이지 버그 수정 및 post의 index action 수정 (0) | 2017.02.23 |
사이트 방문자 count (0) | 2017.02.23 |