다음과 같은 매우 기본적인 마이그레이션 코드가 있습니다. 그것은 테이블을 제거하고, 테이블을 생성하고, 일부 데이터로 시드합니다.NodeJS/Express의 올바른 오류 처리
this.knex.schema.dropTable(this.tableName)
.catch((err) => console.log(err))
.then(() => {
this.knex.schema.createTable(this.tableName, function(table) {
table.increments("id").primary();
table.string("name");
table.integer("parent_id").unsigned().default(0);
})
.catch((err) => console.log(err))
.then(() => {
this.categories.forEach((category) => {
Category.create(category)
.catch((err) => console.log(err))
.then((category) => console.log(category.get("name") + " seeded."))
});
});
});
알다시피 코드에는 3x .catch((err) => console.log(err))
연쇄가 있습니다.
지금 당장 Bugsnag를 내 응용 프로그램에 통합 시켰습니다. 모든 버그를 해결할 수 있도록 Bugsnag에 모든 예외/오류를 올바르게 기록하고 싶습니다. 그러나 지금 당장 할 수있는 일은 콘솔에 기록하는 것뿐입니다. 더 나쁜 것은, 나는 자신을 반복하고 각 catch
블록의 논리를 복제합니다.
나는이 같은 일을 생각 해요 : 또 다른 문제를 abrings
.catch((err) => ErrorHandler.add(err))
class ErrorHandler {
add(err) {
// Notify Bugsnag
// Log it to console
}
}
합니다. catch
메서드를 추가하는 것을 잊어 버린 경우에도 여전히 작동하지 않습니다. 또한,이 같은 일을 대한
생각 : 나는 모든 오류를 잡아 내 코드 건조하지만, 노드가 후킹 예외를 지원하는지 잘 모르겠습니다 수
// Change exception behaviour so whenever they are called, they raise an `onException` event
app.listen("onException", (err) => {
// Notify Bugsnag
// Log error to console
});
이런 식으로.
내 경우에는 무엇을 할 것이며 어떤 접근 방식을 취해야합니까? 모든 오류가 Bugsnag에 제대로 보내지는지 확인하고 싶습니다.
놀라운 대답을 보내 주셔서 감사합니다. createTable이 약속을 반환하지 않으면 약속을 반환하기 위해 어떻게 변환 할 수 있습니까? 또한 Bluebird는 정확히 무엇이며 어레이 맵 완성을 어떻게 이해합니까? 지금은 단지 다른 종류의'save (...), then (...)'약속들입니다. 언젠가 언젠가는 약속을 읽어야 할 것 같아요. 이것에 관해 당신이 제안 할 수있는 것이 있습니까? – Aris
당신의 추측은 정확합니다. 먼저 도움이 될만한 약속에 익숙해 져야합니다. https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html – Srle
읽었습니다. 그것. 대부분의 내 질문에 답합니다. 그러나, 나는 이것을 어떻게 약속 할 수 있을지 확신하지 못한다 :'this.knex.schema.createTable'. 또한 미래에 약속을 되풀이하지 않는 것을 약속해야한다면 어떻게 할 수 있습니까? 메소드를 오버라이드하고'Promise.something()'을 리턴 하시겠습니까? – Aris