私は最近、pgモジュール(https://github.com/brianc/node-postgres)を使用するexpress.jsベースのアプリケーションの作業を開始しましたexpress.jsベースのアプリケーションでのエラー処理の集中化
また、ノードやエクスプレスアプローチのエラー処理、ミドルウェアの適切な設計などのメリットについては、かなりの時間を費やしていましたが、解決策がなくても繰り返し問題が発生しています。
言って、私は次のルータの方法があります:
app.get("/:someThing/:someId", function(req, res, next) {
pgClient.query("some SQL query", function(err, data) {
if (err) { return next(err); } // some 500 handler will take it
if (data.rows.length == 0) {
next(); // send it over to a 404 handler
}
//finally, here we get the chance to do something with the data.
//and send it over via res.json or something else
});
});
私が正しく読んでいれば、これはそれを行うための適切な方法でなければなりません。しかし、ネストされた複数のコールバックがある場合には、同じルータメソッドでも何度も何度も書き直すのはあまりにも多くの定型文であることに気づくことでしょう。
私は、このような状況を一元的に処理する最良の方法は何かを尋ねてきました。私のアイデアはすべてpgClient.queryメソッドをインターセプトすることです。 1つは、クエリメソッドは単にコールバックに渡す代わりにエラーをスローします。別の方法では、pgClient.queryの呼び出しは、ルータメソッドをpgClientの隣に送ります。次に、インターセプトされたクエリメソッドは、次に渡される次のものを処理する方法を知ります。
私が知っているので、周りにエラーを投げることは、実際には500人のハンドラにそれを手に入れる適切な方法ではありません。一方、pgClientのオプションとして次のpassinは、私の知識と経験に基づいて上記のレイヤーに関する多くの知識を低レベルで提供し、カップリングにつながり、どちらもあまり良くありません。
あなたはどう思いますか?
'/:サムシング/:someId'? –
はい、私はそれを変更しました – user1219569
いいえ、私はすべての500件のリクエストについて1つのルートを考えました。 –