export function isModeratorOrAdmin (req, res, next) {
User.findByPk(req.user_id).then(user => {
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
if(roles[i].name === "moderator") {
next();
return;
}
if(roles[i].name === "admin") {
next();
return;
}
}
res.status(403).send({
message: "관리자 또는 중재자 권한이 필요합니다."
});
return;
});
})
}
위 예시에서처럼 next(); return; 으로 사용할 때도 있고
export function verifyToken (req, res, next) {
let token = req.headers["x-access-token"];
if(!token) {
return res.status(403).send({
message: "인증 토큰이 없습니다."
});
}
jwt.verify(token, config.secret, (err, decoded) => {
if(err) {
return res.status(401).send({
message: "권한이 없습니다."
});
}
req.user_id = decoded.id;
next();
});
}
이 예시에서 처럼 next()만 쓸 때도 있다.
왜그럴까? 나는 이 이유를 생각하지 않고 코딩을 하다가 문제에 직면했다.
next()는 라우터에 연결된 여러 미들웨어들을 연결해주는데
첫번째 미들웨어의 코드들이 다 끝나기도 전에 next()가 실행되면 두번째, 세번째, ... 마지막 미들웨어가 끝난 후에 이 첫번째 미들웨어의 나머지 코드들이 실행된다.
이것을 막기위해
next();
return;
또는
return next()
를 쓰면 되돌아오지 않는다.
'개발 > Javascript(Typescript)' 카테고리의 다른 글
자바스크립트 자료구조 (1) | 2023.10.17 |
---|---|
promise, 동기, 비동기 (0) | 2023.10.11 |
for문을 동기적으로 처리하기 (1) | 2023.10.10 |
자바스크립트 예외 처리(Exception Handling) (0) | 2023.09.07 |
bcrypt로 비밀번호 암호화하기 (0) | 2023.08.31 |