2015-05-29 14 views
9

Come si restituisce un errore all'interno di un hook di operazione?Strongloop: come si restituisce un errore se Operation Hook fallisce?

Il caso d'uso invia una notifica push dopo aver salvato una nuova istanza di modello.

Osservo l'evento 'after save', invio push. Se questo non riesce per qualsiasi motivo, voglio inviare un codice 500 response. Come lo faccio?

Non riesco a trovare la documentazione su cosa sia o che sia l'oggetto ctx.

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

Grazie

+1

È possibile ispezionare l'oggetto ctx con un 'console.log (ctx)'. È l'oggetto contesto che rappresenta la richiesta e i dati associati ('ctx.instance' è l'istanza Cliente, ad esempio). Per passare gli errori tramite i hook operativi, passa l'errore tramite 'next (error); 'come ultima riga nel tuo hook. Ma è qui che finisce la mia comprensione - non sono sicuro di dove finisca o di come gestirlo in un posto centrale. – Brian

+0

È possibile utilizzare il modulo di asserzione per generare errori in modo pulito. –

risposta

9

Credo che sia qualcosa in queste righe:

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

estensione della risposta precedente, come non posso aggiungere ancora commenti.

È possibile fornire ulteriori informazioni alla risposta errore:

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

Ciò restituirà qualcosa come:

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

C'è una documentazione dettagliata su ciò che CTX contiene in realtà. Può essere trovato in Loopback after-save operation hook docs.

L'oggetto ctx ha il metodo instance che restituisce l'istanza del modello che è stata salvata. È possibile restituire l'errore dopo aver controllato l'istanza modello modo:

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

La documentazione sopra copre le proprietà dell'oggetto CTX per il gancio after save.

Problemi correlati