본문 바로가기
Server/Node.js

검색기능 만들기(1) - URL query string

by kkkkk1023 2023. 9. 8.

해당 글은 이전 글들의 작업을 이어서 진행되고 있는 글입니다.

 

1. 검색창 만들기

검색을 하려면 검색창이 있어야하기 떄문에 list.ejs 파일에 검색창 UI를 만들어보겠다. 

상단에 아래 코드 삽입

<div class="container input-group mb-2">
  <input class="form-control" id="keyword">
  <button class="input-group-append btn btn-danger" id="search">검색</button>
</div>

 

 

 

2. GET 요청으로 서버에게 데이터 보내기 

서버로 데이터를 보낼 때는 POST 요청을 사용하면 된다. 하지만 GET 요청으로도 서버로 데이터를 보낼 수 있는데 그게 바로 query string을 통해서 데이터를 보내는 것이다.

 

query string이란 쉽게 말해서 GET 요청시 URL 뒤에 데이터를 몰래 심어서 요청하는 것이다. 

 

 

위의 URL과 같이 물음표 뒤에 데이터1 이름 = 데이터1 값 & 데이터2 이름 = 데이터2 값으로 이루어져있는 것이 query string이다.

 

query string의 형식은 
?데이터이름=데이터값이다.

 

 

이제 한번 우리 사이트에 적용해보자. 

방식은 누군가 검색창에 A라는 단어를 입력하고 검색 버튼을 클릭하면 ~/search?value=A으로 URL이 되도록하면 된다.

 

$('#search').click(function(){ //검색 버튼을 누르면
  var inputValue = $('#keyword').val(); //검색창에 입력된 A 값
   window.location.replace('/search?value=' + inputValue); //URL 변경
})

 

 

 

3. 서버에서 query string 확인하기

app.get('/search', (request, response) => {
	console.log(request.query.value);
})

위와 같이 코드를 짜면 데이터 값을 가져올 수 있다. 검색창에 사과라고 검색을 하면 사과가 request.query.value으로 오는 것이다.

 

 

 

4. 서버로 넘어온 데이터를 이용해서 DB에 있는지 확인해서 가져오기

이전에 우리는 DB에 데이터가 있는지 확인하는 방법을 배웠다. find()를 사용하면된다. 

 

app.get('/search', (request, response) => {
    db.collection('post').find({ title: request.query.value }).toArray(function (error, result) {
        response.render('search.ejs', { keyword: result })
    });
})

 

위의 2번줄을 해석하자면 post라는 콜렉션에서 title이 request.query.value인 값을 찾아서 result로 반환해라! 라는 의미이다.