単純化されたコード...しかし、基本的なシナリオは、ユーザーを検索するためにMongoでfindOneクエリを実行していますが、ユーザーが存在しない場合、Webサーバー全体をクラッシュさせるエラーをスローします. これらのエラーを正しくラップして、すべてがダウンしないようにするために、誰かが私を正しい方向に向けることができますか?
ルート:
server.get('/v1/user/:token', function(req,res){
console.log("user endpoint hit");
var user = users.findOne({token:req.params.token}, function(err,user){
if (user) {
res.json({token:user.token,credits:user.credits,subscribed:user.subscribed,searches:user.searches});
} else {
console.log("DB error in lookup user");
throw new DBError("Error looking up user in get endpoint");
}
});
});
DBError 宣言:
function DBError(msg) {
this.name = "DBError";
console.log("DBError " + msg);
Error.call(this,msg);
Error.captureStackTrace(this, arguments.callee);
}
エラーを処理するチャンクは次のとおりです。
server.error(function(err, req, res, next){
if (err instanceof NotFound) {
res.send(404,{error: "404 Not Found"});
}
else if (err instanceof DBError) {
res.send(400, {error: "Database error"});
} else {
res.send(500,{error:"500 internal error"});
}
});
ここで単体テストを実行すると、スタックトレースが表示され、サーバープロセスが終了します (理想的ではありません!):
user endpoint hit
DB error in lookup user
DBError Error looking up user in get endpoint
/Users/msencenb/Development/nodeProjects/reversePhoneLookup/server/app/node_modules/mongodb/lib/mongodb/connection/server.js:563
throw err;
^
[object Object]