저장을 습관화
에러 기록 - [object Object] 본문
- 증상
node.js와 sequelize로
회원가입 API를 만들고 있던 중
전달인자 email, password, confirm을 받아
password와 confirm이 일치하는지 검사하는 부분이 있었음
// ...
createUser = async (email, password, confirm) => {
// ...
if (!confirm || password !== confirm) {
throw new Error({
errorMessage:
'패스워드가 일치하지 않습니다. 패스워드 재입력은 confirm 입니다.',
});
}
// ...
}
에러를 발생시키기 위해 email과 password만 보냈더니
{
"email":"test@gmail.com",
"password":"1234"
}
"errorMessage": "[object Object]"
원하던 에러 메세지 '패스워드가 일치하지 않습니다.....' 가 아닌
[object Object]가 나옴
이는 객체를 문자열로 변환하지 않고 그대로 출력하려할 때 발생하는 에러라고 함
예시)
const obj = { key: 'value' };
console.log(obj); // [object Object]
- 원인
3계층 아키텍처 도입전 routes에서 로직을 전부 처리할때 사용하던 방법을
그대로 복사해서 services에서 넣고
return res.status().json 부분만 throw new Error로 고쳐썼기에 발생한 일
// 3계층 아키텍처 도입 전, routes에서 쓰던 방식
try{}
catch(error){
return res.status(403).json({
errorMessage:
"패스워드가 일치하지 않습니다. 패스워드 재입력은 confirm 입니다.", }); }
// 3계층 아키텍쳐 도입 후, service에 작성했던 문장
if (!confirm || password !== confirm) {
throw new Error({
errorMessage:
'패스워드가 일치하지 않습니다. 패스워드 재입력은 confirm 입니다.',
});
}
- 해결
로직 흐름 사이사이에 console.log("1"), console.log("2"), console.log("3")...을 넣고 로그가 남지 않는 지점을 찾고,
'errorMessage:'와 중괄호를 제거
// before
if (!confirm || password !== confirm) {
throw new Error({
errorMessage:
'패스워드가 일치하지 않습니다. 패스워드 재입력은 confirm 입니다.',
});
}
// after
if (!confirm || password !== confirm) {
throw new Error(
'패스워드가 일치하지 않습니다. 패스워드 재입력은 confirm 입니다.'
);
}
'공부 > node.js' 카테고리의 다른 글
Nest.JS로 API 만들기 - 1 (0) | 2023.09.06 |
---|---|
에러 기록 - "서비스에서는 컨트롤러가 필요한 형태로 값을 반환해야 합니다." (0) | 2023.08.09 |
Nest.js 연습 - 게시판 만들기 2 (0) | 2023.08.05 |
Nest.js 연습 - 게시판 만들기 (0) | 2023.08.04 |
Nest.js 입문 기록 3 - IoC와 DI (0) | 2023.08.04 |