본문 바로가기
javascript

NodeJS의 에러는 어떻게 처리해야 하나요?

by it-square 2022. 1. 4.
반응형

때로는 오류가 위협적일 때도 있지만, 실제로 오류가 없을 때는 앱이 잘 작동됩니다! 우리가 실수를 올바르게 처리한다면 프런트엔드 팀원들은 매우 고마워할 것입니다.

오류

Node.js에서 실행되는 응용 프로그램에는 일반적으로 네 가지 범주의 오류가 발생합니다.

  • 구문, 참조, 유형 등의 표준 JavaScript 오류.
  • 시스템 오류는 존재하지 않는 파일을 열거나 닫힌 소켓을 통해 데이터를 보내는 시도와 같은 기본 운영 체제 제약에 의해 트리거됩니다.
  • 응용 프로그램 코드에 의해 트리거된 사용자 지정 오류입니다.
  • AssertionErrors는 절대 발생해서는 안 되는 예외적인 논리 위반을 Node.js가 탐지할 때 트리거될 수 있는 특수 오류 클래스입니다. 이것들은 전형적으로 주장 모듈에 의해 제기된다.
 

Node.js에 의해 제기된 모든 자바스크립트 및 시스템 오류는 표준 자바스크립트 클래스에서 상속받거나 인스턴스이며 적어도 해당 클래스에서 사용 가능한 속성을 제공한다는 것을 보증한다.

api에서는 프로세스로 json 결과를 반환합니다. 하지만 우리 앱에 에러가 발생하면 에러 메시지, 우리 앱의 스택 트리 등의 정보가 반환됩니다. 이 경우 사용자는 우리 앱의 개인 정보를 학습하여 나쁜 용도로 사용할 수 있습니다. 반면에, 우리 팀원들은 무슨 일인지 이해하지 못합니다. 따라서 에러가 발생했을 때 우리의 성공적인 결과처럼 json 결과를 보내주시면 좋겠습니다.

이전 기사에서 노드 앱과 폴더 구조를 만드는 방법을 살펴보았습니다. 우리는 그 위에 무언가를 짓는다. 아직 책을 안 읽으셨다면, 시간이에요.

우리는 앱이 성공적인 json 결과를 반환했다고 말합니다.

  {
      "code": "0",
      "msg": "Success",
      "records": [
          {
              "key": "rXOajnqt",
              "value": "QFKmpxRhmPPm",
              "count": 2169
          }
      ]
  }
 

3개 있어요.

코드; 결과 코드. 0은 성공을 의미합니다. 다른 코드는 오류에 사용됩니다.

msg; 결과에 대한 간략한 설명

기록; 이 키는 성공적인 결과에서만 발생합니다. 그것은 결과 데이터를 포함하고 있습니다.

세부 정보; 오류 상황이 발생합니다. 자세한 오류 메시지를 제공합니다.

 

오류 예제;

  {
      "code": "4",
      "msg": "fail",
      "details": "No data found"
  }

보시다시피 코드와 MSG 특성은 상호적입니다. 이렇게 하면 결과를 쉽게 이해할 수 있으며, 오류의 경우 세부 사항을 살펴보고 문제를 해결할 수 있습니다.

코딩을 시작해 봅시다!

먼저 errorHandler.js라는 미들웨어 파일을 만듭니다.

 

이것은 모든 오류 상황에서 트리거됩니다. 그 말은 우리가 오류를 통제할 수 있다는 뜻입니다. 우리는 오류, req, res, next의 4가지 파라미터가 있습니다.

error 매개 변수는 전송한 의 오류를 가져옵니다. 여기에는 또 다른 목적이 있는데, 이 글의 뒷부분에서 언급하겠습니다.

로거도 통합했어요. 벌목은 가장 중요한 것 중 하나입니다. 하지만, 그것은 다른 날에 대한 주제입니다.

아홉 번째 줄에는 오류 상태와 함께 책임 상태가 지정되며, null이면 기본값을 할당합니다. 이후 상태처럼 오류 메시지를 json에 할당합니다.

그럼 무엇이 미들웨어를 작동시킬까요?

 

두 가지. 지정되지 않은 엔드포인트 및 기타 오류입니다.

또 다른 오류로 인해 오류 및 ApiError.js 파일이라는 폴더를 만들었습니다. 원하는 경우 스크립트/utils에 이 파일을 넣을 수 있습니다.

우리는 자바스크립트 에러 클래스에서 상속받아야 합니다. 이러한 방법으로 모든 오류에 액세스할 수 있습니다. 에러 접근 후 이 키워드로 조작하겠습니다. 만약 당신이 이 선에 무슨 일이 일어나는지 이해하지 못한다면, OOP를 배워야 합니다.

우리는 마침내 이 함수를 호출하고 오류를 반환할 수 있습니다.

사용 예제;

 

이 예에서는 데이터를 검증할 때 joi가 오류를 발생시키면 next로 오류 클래스를 호출합니다.

지정되지 않은 엔드포인트의 경우 app.js 파일로 돌아갑니다. 모든 엔드포인트 후 app.use()를 사용하여 애플리케이션 수준 미들웨어를 앱 개체의 인스턴스에 바인딩합니다. 사용자가 엔드포인트와 일치하지 않는 요청을 보낼 경우 이 요청이 탐지됩니다. 그런 다음 다른 오류와 마찬가지로 오류 클래스를 호출하면 됩니다.

  //this runs if the EP is not found
  app.use((req, res, next) => {
  next(new ApiError(`${req.method} ${req.path} endpoint not avaiable`, 404));
  });

마지막으로 app.js 파일의 에러 핸들러 미들웨어 끝을 호출해야 합니다. 앱에 오류가 있을 경우 에러 핸들러 미들웨어를 트리거하여 응답할 수 있습니다.

  app.use(errorHandler);
 

여러분이 즐기고 배웠기를 바랍니다!

댓글