혼자 고민해보기_ 개발/TIL (Today I Learned)
20230710(월)_ 노드 JS 심화 Lv5 과제 완료
nuri-story
2023. 7. 10. 22:39
금일 달성 항목
1) 노드 JS 심화 Lv5 과제 완료
문제 해결 과정 1 - res 를 찾을 수 없습니다.
[문제]
Layered Architecture Pattern 으로 로그인을 구현하는데 cookieParser를 불러오지 못하고 있는 상황이었습니다.
users.Service.js
logIn = async ({ nickname, password }) => {
const user = await this.usersRepository.findNickname({ nickname });
if (!user || password !== user.password) {
return { code: 412, data: "닉네임 또는 패스워드를 확인해주세요." };
}
try {
const token = jwt.sign(
{
userId: user.userId,
},
process.env.JWT_SECRET_KEY
);
res.cookie("authorization", `Bearer ${token}`);
return { code: 200, data: "로그인에 성공하였습니다."};
} catch (error) {
return { code: 400, data: "로그인에 실패하였습니다." };
}
};
[시도]
동료분께 물어보니 res 를 불러오지 못하니 레포지토리에서 선언해보는게 어떻겠냐 라고 하셔서 레포지토리에서 res를 꺼내오고 서비스에도 넣기로 해보았습니다. 되긴되는데 이게 맞는 방식인지는 확인을 해봐야 하는 상황이었습니다.
createUser = async ({ nickname, password, confirm }) => {
return await Users.create({res, nickname, password, confirm });
};
logIn = async ({ res, nickname, password }) => {
const user = await this.usersRepository.findNickname({ nickname });
if (!user || password !== user.password) {
return { code: 412, data: "닉네임 또는 패스워드를 확인해주세요." };
}
try {
const token = jwt.sign(
{
userId: user.userId,
},
process.env.JWT_SECRET_KEY
);
return { code: 200, data: "로그인에 성공하였습니다.", token };
} catch (error) {
return { code: 400, data: "로그인에 실패하였습니다." };
}
};
[해결]
res를 서비스에 사용해도 상관은 없는데 규칙에 어긋나는 거라고 말씀해주셨습니다.
그래서 쿠키를 컨트롤러로 옮기고 서비스에서 토근을 반환해주는 것으로 변경하였습니다.
로그인이 잘 작동이 됩니다.
users.contraller.js
logIn = async (req, res) => {
const { nickname, password } = req.body;
const { code, data, token } = await this.usersService.logIn({
nickname,
password,
});
res.cookie("authorization", `Bearer ${token}`);
res.status(code).json({ data });
};
users.service.js
logIn = async ({ nickname, password }) => {
const user = await this.usersRepository.findNickname({ nickname });
if (!user || password !== user.password) {
return { code: 412, data: "닉네임 또는 패스워드를 확인해주세요." };
}
try {
const token = jwt.sign(
{
userId: user.userId,
},
process.env.JWT_SECRET_KEY
);
return { code: 200, data: "로그인에 성공하였습니다.", token };
} catch (error) {
return { code: 400, data: "로그인에 실패하였습니다." };
}
};
[알게된 점]
아직 잘 모르는 부분이 많지만 공부해보려고 합니다.