[풀스텍]유튜브클론코딩-6 (mongoose - Search)

mini·2022년 12월 27일
0

sort()

  • asc : 오름차순
  • desc : 내림차순
  • 예시:
    const videos = await Video.find({}).sort({ createdAt: "desc" });

Search 기능

  1. 라우터 설정(global), 컨트롤러에 함수만들기, 해당 search pug 파일 만들기
  2. form은 get으로 설정하고 검색 필터 name에 ?name=[키워드] 에 들어갈 name 설정
  3. URL에 들어간 정보를 빼내기 -> req.query 를 console.log하면 { keyword: '리액트' } 이런식으로 데이터가 찍히는것을 확인
  4. videos 에 빈 array를 만들고 .. keyword가 있다면 videos array는 업데이트 된다. - 여기까지는 title이 keyword와 완전히 일치해야 결과가 나올 것이다.
//2. 방법 - videos 에 빈 array를 만들고 .. keyword가 있다면 videos array는 업데이트 된다. 
//- 여기까지는 title이 keyword와 완전히 일치해야 결과가 나올 것이다.
export const search = async (req, res) => {
  const { keyword } = req.query;
  let videos = [];
  if (keyword) {
    videos = await Video.find({
      title: keyword,
    });
  }
  return res.render("search", { pageTitle: "Search", videos });
};

4.-1

Bubble - 블록 위에서 선언한 변수는 자식 함수에서 읽기 가능하고 자식함수에서 만든 지역 변수는 부모 함수에서 조회 할 수 없다.

export const search = async (req, res) => {
  const { keyword } = req.query;
  let videos = [];
  if (keyword) {
    videos = await Video.find({
      title: keyword,
    });
    return res.render("search", { pageTitle: "Search", videos });
    // if문을 타려면 있어야 하고 또 videos 변수를 읽으려면 해당 버블 안에서만 저장이 되어있다.
  }
  return res.render("search", { pageTitle: "Search" });
};
  1. 정규식을 이용해 검색 옵션을 지정한다. mongoDB 에서 제공하는 필터 엔진 operate
    • regex 라는 연산자(operator)를 사용해야한다. (regular expression의 약자)
    • 예: $gt:3 -> 3보다 더 크게
        export const search = async (req, res) => {
          const { keyword } = req.query;
          let videos = [];
          if (keyword) {
            videos = await Video.find({
              title: {
                $regex: new RegExp(keyword, "i"), //ignore case
                $regex: new RegExp(`^${keyword}`, "i"), //start with keyword and ignore case
                $regex: new RegExp(`${keyword}$`, "i"), //end with keyword and ignore case
              },
            });
          }
          console.log(videos);
          return res.render("search", { pageTitle: "Search", videos });
        };

0개의 댓글