2016-07-12 8 views
0
Handhabung

Ich folge Loopback-Rahmen-Tutorial, speziell diese Seite https://docs.strongloop.com/display/public/LB/Extend+your+API gibt es ein Beispiel-Code, der eine Instanz von ID findet, modifizierte ich es ein bisschen inexistent Instanzen zu handhabenLoopback PersistedModel() Fehler finden

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); 
    }); 
}; 

es funktioniert alles gut, wenn ich es mit bestehenden ID nennen, aber wenn ich eine ungültige ID eingeben, statt den Aufruf der err Handler es völlig ausgelassen, die else Anweisung aufgerufen wird und die ganze app stürzt mit der folgenden Konsole Fehler

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

Ich bin neu bei node.js und ich bin mir ziemlich sicher, dass ich etwas hier vermisse, aber sollte der Fehler nicht in die Callback-Funktion übergeben werden, anstatt auf die oberste Ebene geworfen zu werden?

Dies scheint nicht mysql Backend-spezifische, ich wechselte zu Mongo-Connector und bekam ein ähnliches Problem. Wie man einen solchen Fehler richtig behandelt?

Antwort

1

Sie müssen auch shop Parameter überprüfen. Eine vollständige Überprüfung wäre wie folgt:

Hier ist ein Muster, das Loopback für ihre eingebauten Modelle verwendet. Code ist aus der Datei node_modules/loopback/common/models/user.js, um 281 Zeilennummer.

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

danke, dieser Ansatz funktioniert. Ich war verwirrt durch mysql Ausnahme, ich erwartete, dass es als 'err' Parameter zu meinem Rückruf übergeben wird. wissen Sie, wann dieser Parameter verwendet wird? Wenn es einen Abfragefehler oder etwas Ähnliches gibt? –

+0

Server getrennt wird durch diesen Fehler sicher. Ich weiß nicht für 'findById', aber für Methoden wie' create', Validierungsfehler und für 'User.login' wird ein fehlgeschlagener Login-Fehler gemeldet. –