2016-04-25 9 views
0

WebサーバーとしてExpressを持つNodeJSアプリケーションと、MongoDB上の抽象レイヤーとしてMongooseを持っています。ここでは簡単なExpressルートがこのように書かれています。ExpressおよびNodeJSでMongoose Errorのエラー処理を行う方法。

module.exports.getProfile = function(req, res, next) { 
    Users.findOne({ 
     '_id': req.user._id 
    }).exec(function(err, profile) { 
     if (err) { 
      res.sendStatus(500); 
     } else if (profile) { 
      res.status(200).send(JSON.stringify({ 
       'profile': profile 
      })); 
     } else { 
      res.status(400).send(JSON.stringify({ 
       'message': "Profile Not found" 
      })); 
     } 
    }); 
}; 

は、今私は私のアプリでは、代わりにres.sendStatus(500)毎回書くのこれらのような、少なくとも100の機能を持って、私はこのような一つの機能を作成したいです。

var sendError = function(err, res, next) { 
    if (err) { 
     res.status(500).send(JSON.stringify({ 
      'message': "Internal server error. Couldn't connect to database. Please report this issue and try again" 
     })); 
     next(); 
    } 
}; 

すべてのDB呼び出しに対してです。 if(err)sendError(err、res、next);うまくいかず、何とか私はそれが正しくないと感じます。では、この場合のベストプラクティスは何ですか?

答えて

1

この目的でExpress.errorHandlerを使用できます。 Express documentationに記載されています。

+0

Express.errorHandlerは、前述のドキュメントページのリンクに指定されていないため、express関数です。 –

+0

Expressのエラー処理のワークフローに関するドキュメントです。 エラーハンドラを呼び出す4つのパラメータと、ルート内でnext()を呼び出して、それに 'err'を渡すと、この関数に実行フローが渡されます。 –

+0

さて、もし私が次の(誤って)与えるなら、あなたは言うつもりですか? res.sendStatus(500)の代わりに上記の関数で使用します。 'app.use(function(err、req、res、next){res.status(500).send( 'Something broke!');})'関数は動作しますか? –

関連する問題