로그인한 사용자만 이용가능한 서비스의 경우(게시물 열람, 게시물 및 댓글 작성 등), 로그인했는지 확인하는 과정이 필요하다. 이때마다 아래처럼 확인하는 코드를 매번 작성하는것은 귀찮기도하고 관리하기에도 부적합하다. 이럴때 미들웨어를 적용해주면 된다.
/controllers/usersController.js
export const editProfileController = async(req, res) => {
const userId = req.session.userId;
const { isProfileImageChanged } = req.body;
// 인증(로그인) 여부를 확인함
if (!userId) {
return res.status(401).json({ message: "로그인 필요" });
}
try{
const previousImageName = await getProfileImageNameByUserId(userId);
let profileImageName = previousImageName;
if(isProfileImageChanged === 'true'){
profileImageName = req.file ? req.file.filename : DefaultProfileImageName;
...
/middleware/auth.js
// 인증 여부 확인 미들웨어
export function checkAuth(req, res, next) {
if(req.session.userId) {
return next();
}
return res.status(401).json({ message: "로그인이 필요합니다."});
}
/routes/postsRoutes.js
// 미들웨어 checkAuth가 추가됨.
router.put('/:postId', checkAuth, upload.single('postImage'), editPostController);
/controllers/usersController.js
export const editProfileController = async(req, res) => {
const userId = req.session.userId;
const { isProfileImageChanged } = req.body;
// 인증(로그인) 여부를 확인하는 코드를 뺌.(미들웨어에서 처리해주므로)
try{
const previousImageName = await getProfileImageNameByUserId(userId);
let profileImageName = previousImageName;
if(isProfileImageChanged === 'true'){
profileImageName = req.file ? req.file.filename : DefaultProfileImageName;
...