2017-10-27 7 views
0

expressJS와 함께 [email protected]을 사용하고 있습니다.모든 유형의 sequelize를 잡는 방법 Error

필자는 특정 유형의 후유증을 잡는 방법을 잘 알고 있으며 정상적으로 작동합니다.

return db.mySequel.transaction(t => { 
    return db.users.findOrCreate({ 
     ..., 
     transaction: t 
    }).spread((rs, created) => { 
     if (created == false) throw new Error("00001"); 
     return db.misc.bulkCreate([ 
      { 
       ... 
      }, 
      { 
       ... 
      } 
     ], { 
      transaction: t, 
      raw: true 
     }); 
    }) 
}).then(rs => { 
    res.json(rs); 
}).catch(db.mySequel.ForeignKeyConstraintError, err => { 
    ... 
}).catch(err => { 
    ... 
}); 

그러나이 쿼리 트랜잭션 프로세스는 사용자 지정 오류 인스턴스도 throw합니다. 그래서 모든 오류 유형별로 Sequelize 오류를 잡아 내고 싶습니다.

어쩌면 나는 더 많은 캐치 체인을 만들 수 있습니다. .catch(db.mySequel.BaseError을 시도했지만 그렇게 도움이되지 않았습니다.

답변

0

문서에 언급 된대로 오류 클래스 간의 상속 관계를 발견했습니다.

그리고 Object.getInstanceOf() 방법과의 관계를 잡을 수 있습니다. __proto__ 속성도 이해할 수 있지만 더 엄격한 규칙을 선호합니다. (. __proto__ 자바 스크립트 엔진의 대부분을 채택하고 있지만 그것은 단지 사실상 표준입니다.)

이것은 내가 만든 방법은 다음과 같습니다

var names = []; 
(function p (inst) { 
    if (inst != null) { 
     var ofProto = Object.getPrototypeOf(inst); 
     names.push(ofProto.constructor.name); 
     p(ofProto); 
    } 
})(err); 
console.log(names) 
// ["ForeignKeyConstraintError", "DatabaseError", "BaseError", "Error", "Object"] 

을 지금은 오류가 어디에서 오는지 알 수 있습니다.

1

여러 catch 블록을 사용하는 대신 단일 catch 블록을 사용하여 개체의 instanceof을 테스트하여 예외 처리 방법을 결정하십시오.

.catch(err => { 
    if (err instanceof db.mySequel.ForeignKeyConstraintError) { 
    // handle foreign key constraint 
    } else { 
    // handle other error 
    } 
}); 
+0

예상 답변이 아니지만 감사합니다. –