Node.js - pagination / filter

김동하·2021년 3월 14일
1

node

목록 보기
5/5
post-thumbnail

pagination, filter 둘 다 DB에 접근하는 것이기 때문에 service에서 실행되어야 한다.

pagination

filter

예를들어 전체 articles에서 어떤 검색어를 포함한 articles를 찾는다고 했을 때

http://enpoint/articles?keyword=userInput

클라이런트에서 이렇게 요청하면

서버에서는

이렇게 들어온다. 저 쿼리를 service에 넘겨서 DB에서 찾아주면 된다. 쿼리에 확장성 있게 대응할 수 있는 유틸 함수를 만들어 준다.

이렇게 짜주면 된다!

응답

엥 프론트보다 필터가 쉬운 거 같은데???

이런 식으로 where에 컬럼을 타고 contains로 필터를 할 수 있다. 매번 where를 생성하는 것이 힘들기 때문에 where을 정해주는 함수를 만든다.

결국 쿼리를 타고 들어오는 것이 키값의 형태이기 때문에

where : { 키 : { contains : 벨류}}

요런 형태로 만들어 주면 된다! 아직 고려하지 않는 것이 필터가 두 개 이상일 때이지만 아직 거기까지 고려하기는 힘들다. 일단 하나만 해보자!

service.js

1. 쿼리가 없을 때 디폴트로 보내줘야 할 것

fields가 없으면 디폴트 쿼리 옵션 객체를 보낸다.

2. 쿼리가 있으면 디폴트 쿼리 옵션과 쿼리 옵션을 합쳐서 보내야 한다.

첫 번째 인자로 디폴트 쿼리 옵션 객체를 받고 두 번째로 콜백을 받는 함수를 만든다.

이렇게 field(or 디폴트 쿼리 옵션 객체)가 entries로 이중 배열 형태가 되고 map을 통해서 키, 벨류를 뽑아서 다시 객체 형태로 만든다.

3. 쿼리 옵션 뽑아내기

이번에는 콜백에 queryOptionFunction이란 함수를 넣고 key, value를 보내준다.

요렇게 키, 벨류를 분리해서 리턴해주면 된다.

완성!

갓챠!!!!!

profile
프론트엔드 개발

0개의 댓글