[Youtube 클론코딩] 삭제 및 검색 기능 구현하기

2022. 10. 30. 14:08공부/Javascript

삭제

삭제는 /video/:id/delete URL에 접근하면 router에서 삭제 controller를 실행시키는 방식으로 구현할 수 있다.

router에서 delete 경로를 추가한 뒤,

controller에 findByIdAndDelete()를 실행하면 된다.

그런데 여기서 한가지 의문점이 드는데, Guide 문서를 살펴보면 다음처럼 Remove와 Delete 두개의 메소드가 존재한다.

Mongoose v6.7.0: (mongoosejs.com)

 

Mongoose v6.7.0:

Parameters: doc «Object» values for initial set [fields] «Object» optional object containing the fields that were selected in the query which returned this document. You do not need to set this parameter to ensure Mongoose handles your query projection

mongoosejs.com

여기서 Model.findOneAndDelete() 부분을 살펴보면, 특별한 이유가 없는 한 Delete를 사용하라고 권장한다.

따라서 그냥 Delete를 사용하는게 좋을 것 같다.

 

검색

검색 기능도 구현을 일단 해보자면, 하나의 페이지를 만들고, 거기서 검색 결과를 출력하는 방식으로 구현할 수 있다.

검색기능은 get 방식으로 구현하면 되는데, get 방식은 post 방식과 다르게 '쿼리스트링'을 이용해 데이터를 전송한다.

 

일단 검색 페이지를 만들어야 하므로, 라우터에 추가해주어야 하는데, 이는 video가 아닌 globalRouter에 추가해준다.

(비디오 하위의 라우팅이 아니므로)

search 페이지를 제작하는데, 제목으로 검색한 뒤 검색된 내용을 하단에 출력하는 방식이다.

그리고 videoController에 다음처럼 search Controller를 작성한다.

여기서 한가지 주의할 점은, 쿼리스트링은 request 객체의 query 속성에 저장된다는 점이다.

 

중간 정리

- 쿼리스트링 : request 객체의 'query' 속성에 저장

- 파라미터(주소의 변수): request 객체의 'params' 속성에 저장

- post로 넘어오는 form 객체 데이터: request 객체의 'body' 속성에 저장

 

여기서 find()에 넘겨주는 filter가 조금 복잡한데, 만약 filter로 그냥 {title: keyword}를 넘겨준다면,

검색하는 내용과 정확히 일치하는 제목만을 가져오게 될 것이다.

그런데 그렇게 검색하는 것은 사용성이 매우 떨어지는데, mongo DB에서는 정규표현식을 지원한다.

 

Query Documents — MongoDB Manual

 

Query Documents — MongoDB Manual

Docs Home → MongoDB Manual ➤ Use the Select your language drop-down menu in the upper-right to set the language of the following examples.This operation corresponds to the following SQL statement:The following example selects from the inventory collect

www.mongodb.com

즉, operator를 이용해서 좀 더 자세한 query를 만들어낼 수 있다는 것.

$regex 를 이용하면 정규 표현식도 사용할 수 있다.

위의 예시처럼 사용할 수 있으며, options에는 'i' 를 넣어준다.

대소문자를 구분하지 않고 검색하는 옵션

위의 코드는 javaScript가 지원하는 RegExp() 함수를 이용해도 된다.

RegExp - JavaScript | MDN (mozilla.org)

 

RegExp - JavaScript | MDN

RegExp 생성자는 패턴을 사용해 텍스트를 판별할 때 사용합니다.

developer.mozilla.org

 

검색이 잘 된다. (new로 검색한 모습)