2016-03-26 6 views
0

Heute war ich in einem Problem, wo ich nicht feststellen konnte, ob ein Löschvorgang erfolgreich im 'after delete' Hook abgeschlossen wurde. Dies ist problematisch, da eine zusätzliche Datenbankoperation erforderlich ist, um festzustellen, ob das Löschen erfolgreich war oder fehlgeschlagen ist.Status der Datenbankoperation in "nach dem Löschen" abrufen hook

UserFollowers.observe('after delete', function observer(ctx, next) { 
    var instance = ctx.instance; // ctx.instance is null for some reason. 
    logger.info('Starting after delete'); 
    logger.info('Ctx:',JSON.stringify(ctx)); 
     // Ctx: {"where":{"followSrcId":2,"followDestId":1},"hookState":{},"options":{}} 
    logger.info('Ctx Non-Enumerable Properties:', Object.getOwnPropertyNames(ctx)); 
     // Ctx Non-Enumerable Properties: ["Model","where","hookState","options"] 
    // Note that Model is the only non-enumerable property not spit out by JSON.stringify() 
}); 

Es gibt keinen Hinweis darauf, ob die Operation war ein Erfolg oder ein Misserfolg, und die 'after delete' Haken werden unabhängig vom Erfolg der Operation genannt. (In der Datenbank manuell überprüft)

Darüber hinaus ist die einzige Möglichkeit festzustellen, ob die Operation erfolgreich war, zu versuchen, den zuvor vorhandenen Datensatz auszuwählen.

Gibt es eine Möglichkeit, das zu bekommen?

Antwort

1

Sie können einen ChangeStream einrichten, der ein Ereignis sendet, wenn das Modell auf dem Server geändert wird. Bei einem DELETE-Befehl wird nur ein Vorbehalt angezeigt. Sie erhalten ein Ereignis, wenn der Vorgang erfolgreich war, auch wenn kein Datensatz vorhanden war, der der Anforderung entsprach. So zum Beispiel, wenn ich versuche, den gleichen Datensatz mit name=foo zweimal zu löschen, ich werde dies zweimal zurück:

{"target":"foo","where":{"name":"foo"},"type":"remove"}

https://docs.strongloop.com/display/public/LB/Realtime+server-sent+events

Edit: Sie können auch eine Änderung Stream erstellen und darauf zugreifen durch ein integriertes in REST API

https://docs.strongloop.com/display/public/LB/PersistedModel+REST+API#PersistedModelRESTAPI-CreateChangeStream

+0

Ahhh. Nun, ich nehme an, wenn es nichts zu löschen gibt, ist es technisch richtig zu sagen, dass es erfolgreich abgeschlossen wurde: P Danke! –

Verwandte Themen