2015-05-29 12 views
9

Wie geben Sie einen Fehler innerhalb eines Operation Hooks zurück?Strongloop: Wie gibt man einen Fehler zurück, wenn Operation Hook fehlschlägt?

Anwendungsfall sendet eine Push-Benachrichtigung nach dem Speichern einer neuen Modellinstanz.

Ich beobachte das 'after save' Ereignis, senden Sie den Push. Wenn dies aus irgendeinem Grund fehlschlägt, möchte ich einen 500 response Code senden. Wie mache ich das?

Ich kann keine Dokumentation finden, was das ctx Objekt tatsächlich ist oder enthält.

Customer.observe('after save', function(ctx, next) { 

    //model saved, but sending push failed for whatever reason, and I want to now send a 500 error back to the user 
    //how? what's inside ctx? how do you send back a response? 
    next(); 
}); 

Danke

+1

Sie können das ctx-Objekt mit einem 'console.log (ctx)' untersuchen. Es ist das Kontextobjekt, das die Anforderung und die zugehörigen Daten darstellt ("ctx.instance" ist beispielsweise Ihre Kundeninstanz). Um Fehler über Operation Hooks zu übergeben, übergeben Sie den Fehler über 'next (error);' als letzte Zeile in Ihrem Hook. Aber hier endet mein Verständnis - ich bin mir nicht sicher, wo das endet oder wie man es an einem zentralen Ort behandelt. – Brian

+0

Sie können Assert-Modul verwenden, um Fehler auf saubere Weise zu werfen. –

Antwort

9

Ich glaube, es etwas in dieser Richtung ist:

var error = new Error(); 
error.status = 500; 
next(error); 
8

die vorherige Antwort erweitern, da ich noch nicht Kommentare hinzufügen.

Sie können weitere Informationen zur Fehlerreaktion liefern:

var error = new Error(); 
error.status = 401; 
error.message = 'Authorization Required'; 
error.code = 'AUTHORIZATION_REQUIRED'; 

Das ist etwas zurück wie:

{ 
    "error": { 
     "name": "Error", 
     "status": 401, 
     "message": "Authorization Required", 
     "code": "AUTHORIZATION_REQUIRED", 
     "stack": "Error: Authorization Required\n at ..." 
    } 
} 
0

Es detailliert Dokumentation auf welche ctx tatsächlich enthält. Es kann in Loopback after-save operation hook docs gefunden werden.

Das ctx-Objekt verfügt über die Methode instance, die die gespeicherte Modellinstanz zurückgibt. Sie können die Fehler zurück, nach wie so die Modellinstanz überprüft:

if (ctx.instance) { 
    // check if your push operation modified the instance 
    // If condition is not met, throw the error 
    var error = new Error() 
    error.status = 500 
    error.message = '...' 
    next(error) 
} 

Die Dokumentation über deckt die Eigenschaften des ctx-Objekt für den after save Haken.