2017-06-24 8 views
1

私が書いているNodeJS/MongoDBサーバーには、ユーザーとデータベースの何も格納するためのAPI呼び出しがたくさんあります。 MongooseはMongoDBを呼び出すことができます。MongoDBは、クエリを実行した後、エラーがある場合はコールバック関数を返し、返される場合はドキュメントを返します。DBエラーをユーザーに送信する必要がありますか?

エラーをユーザーに送信するか、スローするか(サーバー全体を停止する)、または500エラーを送信する必要があるのだろうかと思います。

例:私が行うことを選択すべき

accountDocument.save(function (err, account) { 
    if (err){ 
     res.status(500).json(err); // Option 1 - sends DB error to user 
     res.status(500).end(); // Option 2 - just notifies there was a problem 
     throw err; // Option 3 - stops the server completely 
    } 
    else 
     res.status(200).json(account); 
    }); 

+0

の可能性のある重複した[REST APIエラーは、優れた実践を返す](https://stackoverflow.com/questions/942951/rest-api-error-return-good-practices)この質問は基本的には同じです。 –

+0

@NeilLunnはい、いいえ...返されるコードについて多くのことを話していますが、私はすでに500を返すことを知っています。問題は、エラーを送信するか、単にサーバーを停止するかどうかです。 – Computor

+0

なぜサーバーを停止しますか?それはそれが他のすべてのユーザのために働くのを止めることを意味するでしょう –

答えて

1

まず、サーバーまたはデータベースに何らかの致命的な問題があるかどうかを判断する必要があります。もしそうなら、あなたはおそらく少なくとも管理者の注意を払う必要があります。おそらくサーバーを再起動しても、その状況を認識し、誰かが知っているか、または何らかの決定的な行動を取る必要があることを通知するコードを作りました。それはあなたのサイトを担当するあなたのOSチームの内部にあり、エンドユーザとは何の関係もありません。

たとえば、クエリを実行する前にコードをデータベースに接続して接続することもできない場合、深刻な問題があります。少し遅延して再試行する以外は何もありませんそれ以外の場合はコードで実行できますが、なぜ誰かにデータベースへの接続がない理由を知ることができるかどうかを誰かに通知するようにします。

その後、私が見た中で最高のプラクティスは、以下の専門的な方法で、バックエンドユーザーに伝えることです。

  1. 予期しないエラーがサーバー上で発生したという事実。
  2. エンドユーザーが何かできることがあれば何でもあります。たとえば、これがAPIクエリの場合は、この問題を引き起こさないより安全なクエリに関するアドバイスを提供することができます。
  3. この特定のエラー状況に一意に対応するいくつかの種類のコード。これはあまりユーザーフレンドリーではありませんが、主なエラーのフィードバックではありませんが、そのようなコードを持つことで、特定のエラーのレポートが難解にならずに開発者に還元されやすくなります。開発者は、このエラーの原因となったコードパスを知ることができるほど十分な情報を持っています。たとえば、「ErrorCode:901」とします。コード中にエラー901が発生する可能性のある場所が1つしかない場合、開発者はコード内のどこを見てテストし、何が原因であるかを調べることができます。

  4. この問題を報告する必要があるかどうか。あなたの内部システムがすでにログに記録され、問題を報告し、誰かの注意を自動的に喚起する可能性が高い場合は、これが既に行われていることをユーザーに知らせることができます。そうでない場合は、報告するように依頼することもできますので、それについて聞くことができ、何かが機能していないことを知ることができます。主に意見基づいているため閉鎖されて

関連する問題