2016-03-24 7 views
0

Wir sind dabei, einen Warenkorb mit der Loopback-API zu erstellen.Abbrechen des Loopback-Speicherereignisses in der Operation "vor dem Speichern"

Wenn ich ein Produkt (zB 12345) zu einer persistenten Datenbank hinzufüge, überprüfe ich, ob dieses Objekt bereits in meinem "Warenkorb" existiert. Wenn der Artikel existiert, erhöhe ich die Menge dieses Artikels. ABER, nach dem Inkrementieren muss ich verhindern, dass der Gegenstand zum Warenkorb hinzugefügt wird.

In der Operation "vor dem Speichern" kann ich das Hinzufügen des Elements zur Datenbank abbrechen. Ich muss in der Lage sein, den Speichervorgang zu stoppen.

+0

Sie müssen mehr Informationen darüber geben, welches System z. Ruby auf Schienen, die Sie verwenden. Denken Sie auch daran, mindestens ein Tag hinzuzufügen, damit die Leute Ihre Frage finden können. – Obromios

+0

Wir verwenden https://docs.strongloop.com/display/SL/Installing+StrongLoop –

Antwort

0

sollten Sie findOrCreate() verwenden wie @amuramoto vermuten lässt. Aber um Ihre Frage zu beantworten, um die Speicherung abzubrechen, rufen next() mit einem Fehler:

next(err);

next(new Error('Why this is cancelled...'));

Es ist schlechte Praxis ein Verfahren auf dem gleichen Modell in einem vor speichern Haken speichern zu rufen. Endlosschleife kann sehr leicht resultieren.

+0

Vielen Dank! FindOrCreate() ist ein großartiges Feature, von dem ich nichts wusste, aber es hat hier nicht funktioniert. Am Ende habe ich die Logik mit einem zusätzlichen Ajax-Aufruf auf die Client-Seite in unserer App verschoben, um nach dem vorhandenen Element zu suchen. Wenn das der Fall ist, rufe ich den Update-Endpunkt an, ansonsten den Einfüge-Endpunkt. Ich wollte das wirklich in der Loopback-API, aber ich konnte es einfach nicht zum Laufen bringen. Wir haben eine Situation, in der wir zwei verschiedene Datenquellen synchron mit dem Wagen halten müssen und es wurde zu kompliziert. –

+0

Haben Sie eine Idee, wie Sie den Speichervorgang abbrechen können, aber den Erfolg zurückgeben? Ich möchte, dass eine API ein Modell verfügbar macht, aber beim POST des Modells eine Konvertierung in ein anderes Modell durchführen und diese stattdessen speichern. – JBCP

+0

@JBCP Das ist nicht wirklich toll, API-Design, vor allem für die nächste Person, die kommt, um den Code zu ändern. Warum nicht eine benutzerdefinierte Remote-Methode für das erste Modell erstellen und diese manuell behandeln, etwa model.createWithFallback()? Die Logik ist wirklich nicht geeignet für den Trick vor dem Speichern, weil Sie sich bereits im Kontext einer Speicheroperation befinden. Sie möchten einen Wrapper für jedes Modell speichern, die benutzerdefinierte Remote-Methode für mich sagt. – Brian

Verwandte Themen