ベロデータフックの使用

以下の説明を読む前に、データ・フックについてをお読みください。

注意:データフックはサーバー上で実行されます。つまり、コードが生成するログはプレビューモードの Developer Console には表示されません。ログを見るには、組み込みのSite Eventsツールを使用してください。

データ・フックのコードは、サイトのBackendセクションにあるdata.jsというファイルに格納されています。

このコードを自分で書いてファイルに追加するか、ベロサイドバーを使ってテンプレートコードを生成することができます。

サイドバーを使ってフックのテンプレートを生成する:

  1. サイドバーのデータベースセクションでコレクション名にカーソルを合わせます。
  2. もっと見るをクリック アイコンをクリックして フックの追加と削除
  3. 作成したいフックを選択し、「コードの追加と編集」をクリックします。選択した各フックのテンプレートが自動的に生成されます。

フックを登録するコードは以下のような書式になる:

コピー
1

について コレクション名 はフックが登録されるコレクションの名前です。フックの フック名フックタイプ.

フック関数は2つのパラメーターを取る。最初のパラメータは、どのフックが呼び出されたかに依存します。現在のアイテム、現在のアイテムのID、クエリ、カウント、エラーのいずれかになります。2つ目のパラメータは、フックが影響するコレクションの名前、現在のユーザのID、現在のユーザのパーミッションロールなど、フックに関するコンテキスト情報を含むオブジェクトです。 

フック関数は特定の型を返すことが期待されている。異なる型の値を返した場合、その値は無視される。

各種フックのパラメータと期待される戻り値の詳細については、Data APIリファレンスを参照のこと。

コレクション内の複数のアイテムに影響するインタラクションのフックは、各アイテムに対して1回ずつ、繰り返し呼び出されます。

注釈

  • insertReference() のような、参照フィールドを変更するための特殊関数は、フック関数をトリガしません。
  • Collection didn't load due to a syntax error(構文エラーによりコレクションがロードされませんでした)」というメッセージが表示された場合は、data.jsファイルを見直して、構文と書式が正しいことを確認してください。また、以下の「After」フックの注釈も参照してください。
  • モジュールのエクスポート形式によっては data.js.詳しくは モジュール・エクスポート構文.

一般論として、フックは次のように機能する: 

  1. コレクションとのインタラクションが発生する。
  2. フック関数が呼ばれ、コレクションとやりとりしているものを受け取る。
  3. この関数は、コレクションと相互作用しているものを修正することも含め、望むロジックを実行する。
  4. この関数は、受け取ったもののバージョンを返す。

例えば、次のようなフックだ:

  1. アイテムがコレクションに挿入されている。
  2. アイテムが挿入される前にインターセプトする。
  3. アイテムのタイトルフィールドの値をすべて大文字に変更します。
  4. 変更されたアイテムを返却する。
コピー
1

コレクションに挿入されたアイテムを見てみると、タイトルがすべて大文字であることがわかる。 

データフックの使用例

挿入前のデータの検証

フックを使用すると、アイテムが特定の要件を満たさない場合に、コレクションへの追加を防ぐことができます。次の例では beforeInsert() フックを使用してメールアドレスフィールドを検証します。メールアドレスが無効な場合、この関数は Promise.reject() となり、アイテムはコレクションに追加されない。

コピー
1

「アフター」フック

関数が実行された後にトリガーするフックは、コレクション内のアイテムには影響しません。コレクション内のアイテムのコピーである関数が返すアイテムにのみ影響を与えることができます。

注意 コレクションデータを変更するために `afterQuery()` フックを使用しないでください。これはコンテンツ管理システム(CMS)のロードに失敗する原因になります。他のデータ操作を行う前にクエリの結果を変更する必要がある場合は、`beforeInsert()``beforeUpdate()` などの適切なフックを使用してください。

APIリスト

この記事のコードでは、以下のAPIを使用している。詳しくはAPIリファレンスをご覧ください。

役に立ちましたか?
はい
いいえ