search.pug
input
의 값을 가져다 쓰기위해선 name
을 지정해 주어야한다.extend base.pug
block content
form(method="get")
input(type="text" placeholder='Search by Title' name="keyword")
input(type="submit", value="Search")
globalRouter.js
import express from "express";
import { home, search } from "../controllers/videoConroller";
import { join, login } from "../controllers/userController";
const globalRouter = express.Router();
globalRouter.get("/", home);
globalRouter.get("/join", join);
globalRouter.get("/login", login);
globalRouter.get("/search", search);
export default globalRouter;
export const search = (req,res) =>{
return res.render("search")
}
req.query
를 사용하여 input
으로 받아온 keyword
값을 변수로 저장한다.export const search = (req,res) =>{
const {keyword} = req.query
return res.render("search")
}
Model.find()
메서드를 사용하여 query
에서 받은 keyword
값을 object
전체에서 찾아준다.export const search = async (req, res) => {
const { keyword } = req.query;
let videos = [];
if (keyword) {
videos = await Video.find({
title: {
$regex: new RegExp(keyword, "i"),
},
});
}
return res.render("search", { pageTitle: "Search", videos });
};
videos
를 비어있는 array
로 지정해주어 if
문 바깥에서도 호출 할 수 있게 변수로 지정해준다. let = videos = []
$regex
regex operator(정규표현식)를 이용하여 대소문자 구분없이 filter해서 검색 할수 있도록 해준다. regex
는 다음과 같은 매개변수가 있다
$regex: new RegExp(keyword, "i")
-> keyword가 포함된 것들을 검색.
$regex: new RegExp(`^${keyword}`, "i")
-> keyword로 시작되는 것들을 검색.
$regex: new RegExp(`${keyword}$`, "i")
-> keyword로 끝나는 것들을 검색.