작업 노트
게시판 검색 기능 본문
전체 소스코드 : https://github.com/imtaekh/my_app/tree/f7bf33030d70da24bf756af96388ba71ad9af588
테스트 사이트 : https://azure0777board.herokuapp.com
게시판에 검색 기능이 추가되었습니다.
제목(title)검색, 본문(body)검색, 제목+본문(title+body)검색입니다.
작성자 검색 방식이 조금 다르니 다음 포스팅에서..
routes/post.js파일입니다.
search 오브젝트를 만드는 함수를 만들어서 mongoose query부분에 전달해 주고, view에서도 사용할 수 있게 view로도 전달해 줍니다.
posts.js 제일 아래에 createSearch함수가 있습니다.
별건 없고 Post.find()안에 검색할 조건을 만들어 주는데, 한가지 이상의 조건이 들어간다면 &&, || 처럼 연산자가 필요할텐데, mongodb는 연산자도 오브젝트의 항목으로 표현합니다. and 라면 {$and:[{조건1},{조건2}]} or 이라면 {$or:[{조건1},{조건2}]}.. mongoDB에서는 &&,||,<,> 등등 모든 연산자들도 항목으로 표시된다는 것을 기억해 주세요.
우리가 필요한 것은 제목, 본문, 제목+본문이므로 searchType에 title이 있다면 title검색 조건을 추가, body가 있다면 body검색조건을 추가하고 조건이 1가지 이상이라면 or연산자를 사용하게 했습니다. 우리가 필요한 것은 제목, 본문의 일부분만 일치해도 결과를 보여줘야 되기 때문에 regex를 사용했죠.
이것으로 서버에 검색기능은 작동하게 됩니다. posts?searchType=title,body&searchText=test등을 입력하면 일치하는 결과만 표시되는 것을 알 수 있습니다.
아래는 front-end입니다. 검색이나 페이지표시기능이나 사실 back-end보다는 front-end가 더 까다롭네요.
views/posts/index.ejs입니다.
93번째 줄에 cvMinLength class와 cv항목들은 제가 만든 form validation에서 쓰이는 것입니다. 최소 글자 수 validation기능을 추가했습니다.
form class가 checkValidation이면 form_validation.js가 작동합니다.
class="cvMinLength" 최소 글자 수를 validation합니다.
cvMinLength="3" 최소 3글자이상이여야 합니다.
cvMinLenErrTo="#searchError" 에러가 있는 경우 $("#searchError")로 에러메세지를 보냅니다.
cvMinLenErrMsg="..." 에러메세지입니다.
public/js/form_validaiton.js입니다.
테스트 결과. css는 생략했습니다. 소스코드에서 봐주세요.
다음은 작성자 검색기능입니다.
'javascript > w3schools nodejs' 카테고리의 다른 글
게시판 검색 - 검색어 하일라이트 (0) | 2017.02.23 |
---|---|
게시판 검색 - 작성자 (0) | 2017.02.23 |
페이지 버그 수정 및 post의 index action 수정 (0) | 2017.02.23 |
사이트 방문자 count (0) | 2017.02.23 |
게시판 페이징 추가 (0) | 2017.02.23 |