2016-03-24 7 views
0

ループバックAPIを使用してカートを構築中です。ループバック保存イベントを「保存前」操作でキャンセルします

永続的なデータベースに製品(12345)を追加するときに、そのアイテムが既に「カート」に存在するかどうかを確認しています。アイテムが存在する場合は、そのアイテムの数量を増やしています。しかし、増分後、私はカートに商品が追加されるのを止める必要があります。

「保存前」操作フックでは、アイテムをデータベースに追加することを取り消すことはできますか。私は保存操作を停止する必要があります。

+0

システムに関する詳細情報を入力する必要があります。あなたが使用しているレール上のルビー。少なくとも1つのタグを追加することを忘れないでください。これは、人々があなたの質問を見つけるのに役立ちます。 – Obromios

+0

https://docs.strongloop.com/display/SL/Installing+StrongLoopを使用しています –

答えて

0

あなたはfindOrCreate()を使用する必要があります。しかし、保存キャンセルし、あなたの質問に答えるために、エラーでnext()を呼び出します。

next(err);

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

それは同じモデルのフックを保存する前に、内部のsaveメソッドを呼び出すために悪い習慣です。無限ループは非常に簡単に発生します。

+0

ありがとうございました! FindOrCreate()はわかりませんでしたが、ここではうまくいきませんでした。私はロジックの部分をアプリケーションのクライアント側に移動させ、アイテムが存在するかどうかを確認するために余分なajax呼び出しを行いました。もしそうなら、私は更新エンドポイントを呼び出し、そうでなければ挿入エンドポイントを呼び出します。私は本当にループバックAPIでこれを望んでいましたが、うまく動作しませんでした。 2つの異なるデータソースをカートと同期させておく必要がある状況があり、それはあまりに複雑になってしまいました。 –

+0

保存をキャンセルしても成功を返す方法はありますか?私は1つのモデルを公開するAPIを持っていますが、モデルのPOSTでは、別のモデルへの変換を行い、その代わりに保存します。 – JBCP

+0

@JBCPそれは本当に素晴らしいAPIデザインではなく、特にコードを修正する次の人にとってです。なぜ、最初のモデルでカスタムのリモートメソッドを作成し、それを手動で処理するのではなく、model.createWithFallback()のようなものでしょうか?あなたがすでにセーブ操作のコンテキストに入っているので、ロジックは実際には前には魅力的ではありません。いずれかのモデルの保存用のラッパーが必要です。これは、私のカスタムリモートメソッドです。 – Brian

関連する問題