위 코드에서 query를 선언하는 방법이 조금 생소하지요?
const query = { ...(username ? { 'user.username': username } : {}), ...(tag ? { tags: tag } : {}), };
이 코드는 username 혹은 tag 값이 유효할 때만 객체 안에 해당 값을 넣겠다는 것을 의미합니다. 다음과 같은 형식으로 query 객체를 만들면 어떨까요?
{ username, tags: tag }
이런 객체를 query로 사용한다면 요청을 받을 때 username이나 tag 값이 주어지지 않습니다. 이 경우에는 undefined 값이 들어가게 됩니다. mongoose는 특정 필드가 undefined인 데이터를 찾게 되고, 결국 데이터를 조회할 수 없습니다.
코드를 다 작성했으면 다음과 같이 username, tag 쿼리 파라미터를 URL에 포함시켜서 요청을 해 보세요.
GET http://localhost:4000/api/posts?username=velopert
GET http://localhost:4000/api/posts?tag=태그
username과 tag에는 여러분이 테스트용으로 작성한 포스트에서 사용하는 값을 넣으세요.