2016-07-12 4 views
0

ハンドリング()エラー、特にこのページ https://docs.strongloop.com/display/public/LB/Extend+your+API IDによってインスタンスを見つけ例コードが存在するを見つけるPersistedModel、私はそれを存在しないインスタンスを処理するためのビットを変更しループバック私はループバックフレームワークチュートリアルを以下だ

それはすべて私が、私は、無効なIDを入力すると、代わりにそれは完全に省略だ errハンドラを呼び出すのでは、しかし、既存のIDとそれを呼び出す elseの文が呼び出されると、次のコンソールエラー

と全体のアプリがクラッシュしたときに正常に動作します
Coffeeshop.getName=function(id, cb) 
{ 
    Coffeeshop.findById(id, function(err, shop){ 
     if(err) 
     { 
      console.log(err); 
      cb(err); 
     } 
     else     
      cb(null, 'Name of the coffee shop is '+shop.name); 
    }); 
}; 

/app/path/here/node_modules/mysql/lib/protocol/Parser.js:78 
throw err; // Rethrow non-MySQL errors 

私はnode.jsを使い慣れていますが、ここで何か不足していますが、トップレベルにスローされるのではなくコールバック関数にエラーが渡されるべきではないと思いますか?

これはmysqlバックエンド固有ではないようですが、mongoコネクタに切り替えて同様の問題が発生しました。このようなエラーを適切に処理する方法は?

答えて

1

shopパラメータもチェックする必要があります。

Coffeeshop.getName=function(id, cb) 
{ 
    Coffeeshop.findById(id, function(err, shop){ 
     if(err) 
     { 
      console.log(err); 
      cb(err); 
     } 
     else 
     { 
      if(shop) { 
      cb(null, 'Name of the coffee shop is '+shop.name); 
      } else { 
      var error = new Error(); 
      error.message = 'Coffee Shop is not found.'; 
      error.statusCode = 404; 
      cb(error); 
      } 
     }   

    }); 
}; 

ここにループバックが内蔵モデルで使用するパターンがあります。コードはファイルnode_modules/loopback/common/models/user.jsから、約281行目にあります。

User.logout = function(tokenId, fn) { 
fn = fn || utils.createPromiseCallback(); 
this.relations.accessTokens.modelTo.findById(tokenId, function(err, accessToken) { 
    if (err) { 
    fn(err); 
    } else if (accessToken) { 
    accessToken.destroy(fn); 
    } else { 
    fn(new Error('could not find accessToken')); 
    } 
}); 
return fn.promise; 
+0

ありがとうございました。私はmysqlの例外によって混乱していた、私はそれが私のコールバックに 'err'パラメータとして渡されると思った。このパラメータをいつ使用するのか分かりますか?このようなクエリエラーやsomehingがある場合は? –

+0

サーバーが接続されていない場合は、このエラーが発生します。 'findById'についてはわかりませんが、' create'、検証のエラー、 'User.login'のようなメソッドではログイン失敗のエラーがこれを通して報告されます。 –

関連する問題