인프런 커뮤니티 질문&답변

jh22j9님의 프로필 이미지
jh22j9

작성한 질문수

풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)

DELETE시 params.id 데이터 타입

해결된 질문

작성

·

127

0

// onDelete in MsgList.js
...
console.log(typeof id) // number
const receivedId = await fetcher("delete", `/messages/${id}`, {
  params: { userId },
});

// delete handler in messages.js
const targetIndex = msgs.findIndex((msg) => msg.id === id);
console.log(typeof msg.id, typeof id) // number, string

 

안녕하세요,

강의에서와는 달리 제 코드에서는 DELETE시 처음부터 서버에서 에러가 발생하여 디버깅 해보니 DELETE 핸들러에서 msg.id는 숫자인데 params.id는 문자열로 들어오고 있습니다. 

클라이언트 onDelete에서 보내는 id를 typeof 로 출력해보면 타입이 숫자여서 이해가 어렵습니다. 

강의와 똑같이 코드 작성한 것 같은데 어디서 비롯된 문제인지 파악이 어려워 질문 남깁니다. 감사합니다. 

 

 

 

답변 2

1

jh22j9님의 프로필 이미지
jh22j9
질문자

네, 답변 감사드립니다.

처음 json 데이터를 만드는 방법부터 코드를 똑같이 작성한 것 같은데, 왜 제 db에는 "id"값이 숫자로 저장되어있는지가 파악이 어려운 부분이었습니다. 좀 더 살펴봐야겠네요. 감사합니다~ 

jh22j9님의 프로필 이미지
jh22j9
질문자

강의를 다시 들어보니 routes 정의에서 messages.json의 id를 문자열로 직접 바꾸는 부분이 있었는데 이 부분을 놓쳤던 것 같네요 😅 해결 되었습니다 

1

정재남님의 프로필 이미지
정재남
지식공유자

REST API 통신 기능 구현 영상

12분 45초 즈음부터 관련한 문제사항의 해결을 하고 있습니다.

제 경우에는 db에 [{ "id": "1",  ... }] 로 저장되어 있어서 서버에서는 문제가 없고 클라이언트에서 문제가 되었는데,

만약 질문하신 분의 db에는  [{ "id": 1,  ... }] 로 되어있다면 

database에 저장된 형태가 다르기 때문에 서버에서부터 문제가 발생했을 수 있겠네요.

어느쪽이든 해결하는 방법은 마찬가지입니다. 서로 다른 타입을 동일하게 맞춰주기만 하면 돼요.

나중을 생각해서 문자열로 형변환하면 되겠지요.

jh22j9님의 프로필 이미지
jh22j9

작성한 질문수

질문하기