2022.05.28 TIL

Seong Hyeon Kim·2022년 5월 28일
0

TIL

목록 보기
20/31

강의 내용중 짧게 설명했지만 이해를 위해서 찾아본
try...catch 함수에 대한 설명

try...catch 문은 실행할 코드블럭을 표시하고 예외(exception)가 발생(throw)할 경우의 응답을 지정합니다.

try {
  try_statements
}
[catch (exception_var) {
  catch_statements
}]
[finally {
  finally_statements
}]

try_statements
실행될 선언들

catch_statements
try 블록에서 예외가 발생했을 때 실행될 선언들

exception_var
catch 블록과 관련된 예외 객체를 담기 위한 식별자

finally_statements
try 선언이 완료된 이후에 실행된 선언들. 이 선언들은 예외 발생 여부와 상관없이 실행된다.

설명

try 선언의 구성은 하나 혹은 그 이상의 선언을 포함한 try 블록 및 catch 항목이나 finally 항목 중 최소한 하나 혹은 둘 다 포함하여 이루어진다. 즉, try 선언에는 세 가지 형식이 존재한다.

try...catch

try...finally

try...catch...finally

catch 블록은 try 블록 안에서 예외가 발생(throw)하는 경우 무엇을 할지 명시하는 코드를 포함합니다. try 블록 (또는 try 블록 내에서 호출된 함수) 내의 명령문이 예외를 throw 하면 제어가 catch 블록으로 이동합니다. try 블록에 예외가 발생하지 않으면 catch 블록을 건너뜁니다.


finally 블록은 try 블록과 catch 블록(들)이 실행을 마친 후 항상 실행됩니다. 예외가 발생했는지에 관계없이 항상 실행됩니다.
하나 이상의 try 문을 중첩 할 수 있습니다. 내부의 try 문에 catch 블록이 없으면, 둘러싼 try 문의 catch 블록이 입력됩니다.
또한 try 문을 사용하여 예외처리를 합니다.

과제중 사용한 예시코드

try {
        const { userId } = jwt.verify({ userId: user.userId}, "sh1014-secret-key");    /// 복호화 겸, 
  																						///검증을위한 코드
        
  		const user = await User.findById(userId).exec();        /// {userId} 변수선언 후 userId 찾기
        
        
    
    } catch (error) {
        res.status(401).send({
            errorMessage : "로그인 후 사용 하세요",
        });
        return;
    }


  • res.locals.user = user; 는 무슨 코드인가요? 우리는 토큰에 담긴 userId로 해당 사용자가 실제로 존재하는지 확인했습니다. 이미 데이터베이스에서 사용자 정보를 가져온것이죠.


  • 이 미들웨어를 사용하는 라우터에서는 굳이 데이터베이스에서 사용자 정보를 가져오지 않게 할 수 있도록 express가 제공하는 안전한 변수에 담아두고 언제나 꺼내서 사용할 수 있게 작성했습니다!
    이렇게 담아둔 값은 정상적으로 응답 값을 보내고 나면 소멸하므로 해당 데이터가 어딘가에 남아있을 걱정의 여지를 남겨두지 않게 됩니다 😎
profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 백엔드 개발자

0개의 댓글