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);うまくいかず、何とか私はそれが正しくないと感じます。では、この場合のベストプラクティスは何ですか?
Express.errorHandlerは、前述のドキュメントページのリンクに指定されていないため、express関数です。 –
Expressのエラー処理のワークフローに関するドキュメントです。 エラーハンドラを呼び出す4つのパラメータと、ルート内でnext()を呼び出して、それに 'err'を渡すと、この関数に実行フローが渡されます。 –
さて、もし私が次の(誤って)与えるなら、あなたは言うつもりですか? res.sendStatus(500)の代わりに上記の関数で使用します。 'app.use(function(err、req、res、next){res.status(500).send( 'Something broke!');})'関数は動作しますか? –