문제설명
controllers에서 services로 매개변수를 보내고 싶다.
likePost = async (req, res) => {
const { postId } = req.params;
const { userId } = res.locals.user;
};
postId와 userId를 매개변수로 해서 services로 보내고 repositoties에서 데이터를 받아서 결과값을 controllers에서 res해야 했는데 자꾸 userId가 undifined가 나왔다.
시도
천천히 repositoties부터 services까지 userId가 제대로 전달이 됐는지 console.log로 확인했다. 그리고 userId가 undifined가 나왔다. 이를 통해서 controllers에서 뭔가 실수를 했기 때문에 코드가 잘 안보내진 것 같다.
likePost = async (req, res) => {
const { postId } = req.params;
const { userId } = res.locals.user;
console.log(postId,userId)
};
console.log의 결과 postId와 userId는 제대로 불러와졌었다. 즉 services로 매게변수를 보내는 과정에서 실수가 발생한 것 같다.
해결
likePost = async (req, res) => {
const { postId } = req.params;
const { userId } = res.locals.user;
try {
const likePostOne = await this.postService.likePost({ postId, userId });
res.status(200).json({ data: likePostOne });
} catch (error) {
res.status(400).json({ error: error.message });
}
};
이건 controllers에서 services로 보내는 코드다.
likePost = async ( postId, userId ) => {
return await this.postRepository.likePost(postId, userId);
};
그리고 이건 controllers에서 받은 데이터를 services가 다시 repositoties로 보내는 코드다.
controllers의 await this.postService.likePost({ postId, userId })는 매개변수 postId, userId를 객체로 보낸 것이다.
services의 likePost = async ( postId, userId )는 매개변수 postId, userId의 객체를 받은 코드다.
하지만 여기서 오류가 있었다. likePost({ postId, userId })는 매개변수 postId, userId를 두개로 보낸 것이 아니라
{ postId, userId }라는 객체 하나를 보낸 것이다.
그리고 likePost = async ( postId, userId )는 매개변수를 2개로 받은 코드다.
그래서 postId에 { postId, userId }가 할당되고 userId 에는 아무것도 할당된 데이터가 없어서 undifined가 됐던 것 이다.
그래서 likePost = async ( { postId, userId } ) 이렇게 바꿔주면 오류없이 제대로 데이터가 전달이 된다.
알게된 점
무심코 객체 자체가 아니라 요소에 집중이 되어서 객체의 데이터를 제대로 받지 못했고 활용을 못했다.
매개변수를 전달하고 받을 때는 그 형식을 잊지말고 제대로 받아야겠다.
전달된 매개변수가 하나인데 전달 받은 매개변수는 2개로 설정이 되어있다면 맨 앞의 매개변수에 전달이 완료되고 그 뒤의 매개변수는 undifined이 된다는 것을 알았다.
'T.I.L' 카테고리의 다른 글
23-07-20 restful한 계층형 아키텍쳐의 구조 (0) | 2023.07.20 |
---|---|
23-07-18 js와 html의 연동 (0) | 2023.07.18 |
23-07-12 throw 문으로 에러 지정하기 (0) | 2023.07.12 |
23-07-10 갑자기 티스토리 관리자 페이지or 티스토리 메인 페이지에 접속이 안된다면? (0) | 2023.07.10 |
23-06-29 js에서 fetch로 POST보내기 (0) | 2023.07.09 |