게임서버-스파르타코딩NodeJs_7기/CH6 최종 프로젝트

트러블슈팅 - 유저위치로 북마커추가 버튼 만들기

GREEN나무 2025. 3. 10. 20:34
728x90

트러블슈팅

유저위치로 북마커추가 버튼 만들기

1. 북마커 추가 후 서버에서 해당 위치에 접근했음은 뜨지만 클라이언트에서 캐치핑크몽 이벤트가 발생하지 못함.

테스트

버튼클릭 후 10분 대기

버튼 클릭 후 새로고침, 10분 대기

버튼 클릭 후 새로고침 여러번, 10분 대기

-> 동일 위치에 데이터가 중복되는 경우 새로고침, 긴 시간 기다려야함(왜지)

 

데이터 1개만 있으면 버튼 클릭 후 1분안에 뜸.

 

2. 중복 데이터 제거하기(유저 당 위치 하나 씩 만들기)

패치 오타

get 메서드는 바디값 못받음. 쿼리 파라미터로 전달

/pinkmong-appear-location/getOne?user_email=${encodeURIComponent(decodedToken.email)}

fetch 요청에서 method: 'get'을 사용하고 있습니다. GET 요청에서는 body를 포함할 수 없습니다. GET 요청의 경우, 데이터를 URL의 쿼리 파라미터로 전달해야 합니다. 따라서 body를 제거하고 URL에 쿼리 파라미터를 추가해야 합니다.

쿼리 사용

  @Get('getOne')
  async getOne(
    @Query('user_email') user_email: string, // 쿼리 파라미터에서 이메일 받기
  ): Promise<{ id: number } | undefined> {
    console.log(`C - 이메일(${user_email})로 북마커 ID 가져오기`);
    return this.service.findOneByEmail(user_email);
  }

 

 

3. 머지 실수로 유저위치와 비교 못함

경도가 먼저

저장 - geoadd(

await this.client.geoadd(key, data.longitude, data.latitude, member);

 

거리 비교 - geosearch

async getNearbyBookmarkP(
latitude: number,
longitude: number,
): Promise<any | null> {

// 1. GEO에서 반경 5m 내의 가장 가까운 북마크 ID 가져오기
const nearestIds = (await this.client.geosearch(
this.P_GEO_KEY,
'FROMLONLAT',
longitude, // 경도 먼저
latitude, // 위도 나중
'BYRADIUS',
5,
'm',
'ASC', // 가장 가까운 순으로 정렬
['COUNT', 1] // COUNT는 배열로 전달
)) as string[];
return nearestIds.length > 0 ? nearestIds[0] : null;
}