작성
·
81
0
http://localhost:3000/posts/:id 를 send하게되면
NotFoundException()이 실행이 되야하는데
이런 에러가 나옵니다
async getPostById(id: number) {
const post = await this.postsRepository.findOne({
where: {
id,
},
});
if (!post) {
throw new NotFoundException();
}
return post;
}
잘 입력한 것 같은데 . 왜그런가요?
답변 2
0
안녕하세요!
에러를 분석할때는 항상 에러 메세지를 이해 해야합니다.
NaN 에러는 "숫자가 아닌 값을 숫자가 필요한 위치에 넣었을때 생기는 에러"입니다.
그러니 코드만 봐서는 절대로 알 수 없는 에러죠.
에러가 발생하는 위치에서 실제 어떤 값을 입력하고 있는지 확인 해보세요 (출력등).
숫자가 입력돼야하는 곳에 숫자 아닌 다른 값을 넣으셨을겁니다.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. 함지현님.
작성하신 코드와 에러 메시지를 통해 문제를 파악해 보겠습니다. 현재 나타나는 에러는 ‘NaN’(숫자가 아님)이라는 값이 id
로 전달되어 PostgreSQL에서 integer
유형으로 인식하지 못해 발생하는 것 같습니다.
에러 메시지로부터, getPostById
함수의 id
파라미터가 숫자가 아닌 값으로 호출되고 있음이 추정됩니다. 실제로 해당 값이 NaN
일 때, 데이터베이스 쿼리가 실패하게 됩니다. 이는 올바른 숫자를 기대하는 쿼리에 잘못된 파라미터를 전달했기 때문입니다.
id
가 숫자인지 확인하고, 만약 숫자가 아니라면 직접적으로 에러를 발생시켜 주도록 하세요.예를 들어 TypeScript에서는 다음과 같이 구현할 수 있습니다:
async getPostById(id: any) {
const parsedId = parseInt(id, 10);
if (isNaN(parsedId)) {
throw new BadRequestException('Invalid ID format');
}
const post = await this.postsRepository.findOne({
where: {
id: parsedId,
},
});
if (!post) {
throw new NotFoundException();
}
return post;
}
관련된 내용은 아래 링크를 참고할 수 있습니다:
- [NestJS] HTTP 파라미터 검증 - Param Decorator 사용법
- [NestJS] 데이터 전송 시 유효성 검사 방법
위 두 가지 조치가 문제를 해결하는 데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.