Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

9시 24분

검색 기능 본문

Javascript/Node.js

검색 기능

leeeee.yeon 2021. 7. 21. 19:24

오늘은 https://hayjo.tistory.com/88 을 참고하여 검색 기능을 만들었다.

구현 핵심 포인트: 쿼리 추출 & LIKE 구문 이용

 

우선 이것이 search.js의 전체 코드이다!

const { request } = require('express');
const express = require('express');
const router = express.Router();

const sanitizeHtml = require('sanitize-html');
const url = require('url');

// 파일 분리
const db = require('../lib/db.js');
const template = require('../lib/template.js');
const auth = require('../lib/auth.js');

router.get('/', function(request, response){
    // 쿼리값 추출
    const newUrl = new URL(request.url, 'http://localhost:3000/search');
    const urlParams = newUrl.searchParams;
    const query = urlParams.get('query');

    db.query(`SELECT * FROM topic`, function(error, topics){
        var title = `${query}`;
        var list = template.list(topics);
        var view = ``;
        
        db.query(`SELECT id, title FROM topic WHERE title LIKE ?`, `%${query}%`
        ,function(error2, result){
            if(error2) throw error2;
            for(var i in result){
              view += `
              <li><a href='/topic/${result[i].id}'>${result[i].title}</a></li>
            `;
            }
            var html = template.HTML(title, list,
                `
                <h2>${title} 검색 결과</h2>
                ${view}
                <br>
                <img src="/images/search.jpg" style="width: 450px; display: block; margin-top" 10px">
                `,
                ``,
                auth.statusUI(request, response)
              );
              response.send(html);
        });
    });
});

module.exports = router;

 

쿼리값 추출이 오히려 검색 기능 구현보다 오래 걸렸던거 같다.

생활코딩 강의에서도 그렇고, 이전에는 url 모듈을 불러온 뒤 url.parse()를 사용했다.

근데 url.parse()라고 뜨기로 그 원인을 찾아보며 위와 같은 코드로 수정하였다.

https://velog.io/@satoshi25/url.parse-deprecated 이 글을 참고하였으며, searchParams에서 쿼리 값을 가져오기 위해서는 get() 함수가 필요했다.

나머지는 다 비슷하니까 이 정도만 적으면 될듯?!

'Javascript > Node.js' 카테고리의 다른 글

간단한 API 만들기  (0) 2021.07.22
pm2 명령어  (0) 2021.07.22
Multi User  (0) 2021.07.19
Passport.js  (0) 2021.07.12
Express Session& Auth - session 미들웨어, 인증 구현  (0) 2021.07.10