Ich habe einen sehr einfachen Migrationscode, der so aussieht. Es entfernt die Tabelle, erstellt die Tabelle und sät diese mit einigen Daten.Korrekte Fehlerbehandlung mit 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."))
});
});
});
Wie Sie sehen können, gibt es 3x .catch((err) => console.log(err))
Kette auf dem Code.
Gerade jetzt habe ich Bugsnag in meine Anwendung integriert und ich möchte sicherstellen, dass ich alle Ausnahmen/Fehler auf Bugsnag ordnungsgemäß protokolliere, damit ich alle Bugs beheben kann. Im Moment kann ich sie jedoch nur in die Konsole einspielen. Noch schlimmer, ich wiederhole mich selbst und dupliziere die Logik in jedem catch
Block.
Ich denke an so etwas wie dies zu tun:
.catch((err) => ErrorHandler.add(err))
class ErrorHandler {
add(err) {
// Notify Bugsnag
// Log it to console
}
}
, dass ein anderes Problem abrings. Was passiert, wenn ich vergessen habe, catch
Methoden hinzuzufügen ... dann wird es immer noch nicht funktionieren.
Gedanken über so etwas wie dies zu tun, auch:
// Change exception behaviour so whenever they are called, they raise an `onException` event
app.listen("onException", (err) => {
// Notify Bugsnag
// Log error to console
});
So kann ich alle Fehler fangen und meinen Code trocken, aber ich bin nicht sicher, ob Knoten Haken Ausnahmen unterstützt.
Was würden Sie in meinem Fall tun und welche Art von Ansatz sollte ich nehmen? Ich möchte sicherstellen, dass alle Fehler ordnungsgemäß an Bugsnag gesendet werden.
Danke für die erstaunliche Antwort. Wenn createTable kein Versprechen zurückgibt, wie kann ich es konvertieren, um ein Versprechen zurückzugeben? Was genau ist Bluebird und wie versteht es die Vervollständigung einer Array-Map? Im Moment ist es nur ein Haufen verschiedener 'save (...). Dann (...)' Versprechungen. Ich denke, ich muss bald etwas über Versprechen lesen. Kannst du irgendetwas dazu vorschlagen? – Aris
Ihre Vermutung ist richtig, Sie sollten zuerst mit Versprechen vertraut werden, etwas, das wirklich helfen kann: https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html – Srle
Ich readed es. Es beantwortet die meisten meiner Fragen. Ich bin mir aber nicht sicher, wie ich das promi- tieren kann: 'this.knex.schema.createTable'. Wenn ich in Zukunft etwas versprechen muss, das kein Versprechen gibt, wie kann ich es dann tun? Überschreiben Sie die Methode und geben Sie 'Promise.something()' zurück? – Aris