<MongoDB> Regular expression

김민석·2021년 1월 11일
0

YouTube clone

목록 보기
33/54

Regular Expression(정규식)은 문자열의 검색을 위해 많이 사용되는데요. 이 사이트에서 정규식과 문자열을 입력하고 그 결과를 확인할 수도 있고 다른 유저가 만든 정규식을 볼 수도 있습니다. 참고하시구요.

우리는 이 정규식을 이용해서 비디오 검색 기능을 만들어보도록 하겠습니다.

project

youtube
  |controllers
   *|videoController.js
  |views
   *|search.pug

videoController.js

videoController에서 search 함수를 아래처럼 수정하겠습니다.

  • Video.find({title: term})
    데이터베이스에 저장된 video element 중에서 title이 term과 일치하는 element들을 배열로 반환합니다.
  • Video.find({title: {$regex: term}})
    regex를 이용하면 title에 term과 일치하는 것이 아니라 term을 포함하는 Video element를 반환합니다.
  • Video.find({title: {$regex: term, $options: "i"}})
    $options: "i"는 insensitive를 의미하며 대소문자를 구분하지 않고 title에 term을 포함하는 Video element를 반환합니다.
export const search = async(req, res) => {
  const { query:{ term } } = req;
  let videos = [];
  try{
    videos = await Video.find({title :{$regex: term, $options: "i"} });
  }catch(e){
    console.log(e);
  }
  res.render("search", {videos, term});
}

search.pug

if문을 사용해서 검색결과가 없을 경우에는 sorry멘트가 나오도록 하였구요. 그렇지 않을 경우에는 반환된 videos를 videoBlock을 이용해 보여줍니다.

extends layout/main
includ mixins/videoBlock

block content
  .search__header
    h3 searching for #{term}
  .search__videos
    if(videos.length === 0)
      h5 sorry, no videos found
    else
      each video in videos
        videoBlock(video)
profile
누구나 실수 할 수 있다고 생각합니다. 다만 저는 같은 실수를 반복하는 사람이 되고 싶지 않습니다. 같은 실수를 반복하지 않기 위해 기록하여 기억합니다.🙃

0개의 댓글