개발 학습일지(TIL)

TIL : NestJS, TypeORM, EJS 검색 결과 갯수 구하기

Veams 2023. 3. 22.

문제상황.

NestJs, TypeORM, EJS 개발환경

 

검색결과는 불러와서 프론트 단에 연결해놨는데,

검색결과가 총 몇 개인지도 알려주고 싶다.

 

리포지토리 코드

async findClubPosts(data?: any) : Promise<Clubs[]> { //clubs 게시글 검색
    {
      console.log(data, '리포지')
      const clubs = await this.clubRepository
        .createQueryBuilder('search')
        .leftJoinAndSelect('search.user', 'user')
        .where('search.title LIKE :s OR search.content LIKE :s', { s: `%${data.term}%` })
        .orderBy("search.id", "DESC")  //최신순(내림차순)
        .getMany()
      return clubs
    }
  }

 

프론트단 코드

<div class="club_table_container">
    <table class="table table-hover club_table">
      <thead id="club_thead">
        <tr>
          <th>Club</th>
          <th>Title</th>
          <th>Writer</th>
          <th>maxMembers</th>
          <th>Date</th>
          <th>View</th>
          <th>Likes</th>
        </tr>
      </thead>
      <tbody>
        <% slicedData.forEach(data=> { %>
          <tr id="club_tr">
            <td id="club_Id"><a class="postLink" href='list/<%= data.id%>'><%= data.id %></a></td>
            <td id="club_Title"><a class="postLink" href='list/<%= data.id%>'><%= data.title %></a></td>
            <td id="club_Writer"><a class="postLink" href="/userpage/<%= data.id %>"><%= data.user.nickName %></td>
            <td id="club_maxMember"><%= data.maxMembers %></td>
            <td id="club_Date"><%= data.createdAt %></td>
            <td id="club_View"><%= data.viewCount %></td>
            <td id="club_Likes"><%= data.Likes %></td>
          </tr>
          <% }) %>
      </tbody>
    </table>
  </div>

 

시도1

 

위 리포지토리 코드 상에서 createQueryBuilder에서

.getMany()를 .getManyAndCount()로 바꾼다.

 

이러면 [객체, 카운트] 식으로 배열을 한 번 더 만들어서 반환 되기 때문에 

프론트단에서 slicedData[0].forEach(....로 코드가 바꿔야 했고

        <a href="users?term=<%=term.term %>" class="new_club"> <%= slicedData[1]%>건 결과 모두보기></a>

식으로 slicedData[1] 에서 검색결과 갯수를 받아오는 형식. 

 

검색 결과는 잘 나오기는 하는데 그런데 기껏 적용해놓은 페이지네이션이 풀리는 문제.

구성해놓은 프론트단 코드와 충돌한 듯 한데, 왜 이러는지는 알 수 없었다.

 

시도2

createQueryBuilder 의 문법 문제 인가 싶어서

.getMany() 와

.count()를 병행하여 사용하기도 함...

코드를 이리저리 바꿔서 구성해보긴했는데,

 

지저분해지기만 하고 마음에 안 듦.

계속 공식문서 찾아보고 난리...

 

 

시도3-해법

자바스크립트

배열에 대한 length  속성 사용.

    <div class="searchCount" id="searchCount">검색결과 : 총 <%= slicedData.length %>건</div>

...이거 생각하고 무릎을 쳤다.

평소에 코딩테스트 문제 풀었으면 금방 생각했을텐데,

엉뚱한 TypeORM, createQueryBuilder 문법만 찾고 있었음...

자바스크립트 구멍이 아직 많은듯.

 

 

알게 된점.

자바스크립트 배열 길이 length를 사용하자... 다음엔 잊지 않을 것임.

댓글