私はこのような非常に基本的な移行コードを持っています。これは、テーブルを削除し、テーブルを作成し、いくつかのデータをシードします。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."))
});
});
});
お気づきのとおり、コードの3倍.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