patch를 사용하여 이력서 항목을 업데이트 하는 로직을 구현했는데, 테스트 중 문제를 하나 알게 되었다...
const updatedResume = await prisma.resumes.update({
where: { resumeId: +resumeId },
data: {
title:title,
contents:contents,
statusCode:statusCode,
},
});
사실 이렇게 기존 코드로 업데이트를 진행해도 무방하나 데이터를 보내지 않을 경우 해당 데이터도 공란으로 엎어쳐지는 문제가 있었다. 사실 업데이트 때보다 신규 등록시에 더 문제가 되는 부분이었다.
statusCode라는 컬럼의 기본값이 "APPLY"인데, 이력서 등록 시 다른 값이 들어갈 가능성을 고려해서(관리자용 옵션) 등록하는 라우터에 해당 항목을 받아와 넣어주는 로직을 구현했었다. 그런데 아무 값도 보내지 않으면 공란으로 저장되고 기본값 적용이 안 되길래 부득이하게 statusCode는 등록 라우터에서 제외했었는데...
const resume = await prisma.resumes.create({
data: {
userId,
title,
contents,
...(statusCode && { statusCode }),
},
});
이런 식으로 수정하니까 해결되었다.
구조분해할당과 전개연산자를 이런 식으로 활용할 수 있구나...
로그인 검증용 미들웨어를 조금 수정하여 자동 로그인을 구현했다.
검증이 필요한 요청을 보낼 때마다 해당 미들웨어를 거치는데, 여기에서 토큰을 검증하고 액세스 토큰이 만료가 되어있으면 리프래시 토큰이 살아있는지 체크한다...
if (error.name === 'TokenExpiredError' && refreshToken) {
try {
const decodedRefreshToken = jwt.verify(
refreshToken,
process.env.REFRESH_TOKEN_SECRET_KEY,
);
const newAccessToken = createAccessToken(decodedRefreshToken.id);
res.cookie('accessToken', newAccessToken, { httpOnly: true });
req.user = await prisma.users.findFirst({
where: { userId: decodedRefreshToken.id },
});
return next();
} catch (refreshTokenError) {
// 리프레시 토큰 오류 처리
res.clearCookie('accessToken');
res.clearCookie('refreshToken');
return res.status(401).json({ message: '재로그인이 필요합니다.' });
}
} else {
switch (error.name) {
case 'JsonWebTokenError':
return res.status(401).json({ message: '토큰이 조작되었습니다.' });
default:
return res
.status(401)
.json({ message: error.message ?? '비정상적인 요청입니다.' });
}
}
TokenExpiredError < 가 토큰이 만료되었을 때 발생하는 에러명이다. 이렇게 해서 리프래시 토큰이 만료되기 전까진 자동 로그인을 유지할 수 있따..
끔찍함...전부 내가 써서 돌려야 하는 라이브러리인줄은 몰랐다
주석형태로 스키마와 예시, 라우터 주소 등을 지정해서 불러와줌...
https://editor.swagger.io/
참조하고, 오류가 나는 부분들은 chatGPT의 도움을 받았다. 줄맞춤이 다르거나 구성이 다르거나 하면 짤없이 안 먹혀서 너무 힘들었다.
https://developers.kakao.com/
여기서 개발자 등록부터 하고... 살펴봤다.
yarn add passport passport-kakao -S
swagger의 끔찍함...