サーチ…


備考

Blueprint APIはどのように機能しますか?

セイルが最初にsails liftを使用し始めると、セイルはコントローラが定義されているかどうかを調べます。この例では、1つのコントローラ、Userコントローラがあります。 Sailsは、このユーザーコントローラの青写真アクションへのアクセスを、あたかもコントローラに組み込んだかのように提供します。 Sailsは、サーバーを持ち上げるときに青写真のルートも自動的に作成します。だから、何のルートがで定義されていない場合でも、 /config/routes.jsと何もアクションが定義されていない/api/controllers/UserController.jsサーバーを持ち上げた後、これらすべてのルートとアクションが使用するために利用されている、明示的に。

青写真のルート

ブループリントを有効にしてsails liftを実行すると、フレームワークはコントローラー、モデル、および設定を検査して、特定のルートを自動的にバインドします。これらの暗黙的な青写真ルートは、 config/routes.jsファイルでこれらのルートを手動でバインドしなくても、アプリが特定のリクエストに応答できるようにします。デフォルトでは、青写真ルートは対応する青写真のアクションを指していますが、そのいずれかをカスタムコードで上書きすることができます。

Sailsには3種類の青写真ルートがあります。

  • RESTfulなルート 。パスは常に/:model/:id?Userモデルとコントローラが定義されると、青写真はRESTfulなルートを暗黙的に次のようにバインドします。
    'GET /user/:id?': {
      controller: 'User',
      action: 'find'
    },
    'POST /user': {
      controller: 'User',
      action: 'create'
    },
    'PUT /user/:id?': {
      controller: 'User',
      action: 'update'
    },
    'DELETE /user/:id?': {
      controller: 'User',
      action: 'destroy'
    }
    
    これらのルートは、HTTP動詞を使用して、ルートが同じであっても実行するアクションを決定します。したがって、 /userへのPOSTリクエストは新しい/userを作成し、 /user/123へのPUTリクエストはプライマリキー123でユーザを更新し、 /user/123へのDELETEリクエストはプライマリキーが123であるユーザを削除します。プロダクション環境では、RESTfulなルートは一般に、不正アクセスを避けるためにポリシーによって保護されるべきです。
  • ショートカットルート 。実行するアクションはパスでエンコードされます。私たちのユーザモデルとコントローラでは、セイルは暗黙のうちに4つのショートカットルートに従います。

    'GET /user/find/:id?': {
      controller: 'User',
      action: 'find'
    },
    'GET /user/create/:id?': {
      controller: 'User',
      action: 'create'
    },
    'GET /user/update/:id?': {
      controller: 'User',
      action: 'update'
    },
    'GET /user/destroy/:id?': {
      controller: 'User',
      action: 'destroy'
    }
    

    たとえば、 /user/create?name=joeショートカットは新しいユーザーを作成し、 /user/update/1?name=mikeはユーザー#1の名前フィールドを更新します。これらのルートはGET要求にのみ応答することに注意してください。ショートカットルートは開発には非常に便利ですが、一般的に運用環境では無効にする必要があります。プロダクションで使用するようには設計されていません。

  • アクションルート :カスタムコントローラアクションのルートを自動的に作成します。たとえば、 queryをユーザーコントローラーで定義されたカスタムアクションとします。それに続くルートは暗黙のうちに帆に利用可能であろう -

    'GET /user/query/:id?': {
      controller: 'User',
      action: 'query'
    },
    'POST /user/query/:id?': {
      controller: 'User',
      action: 'query'
    },
    'PUT /user/query/:id?': {
      controller: 'User',
      action: 'query'
    },
    'DELETE /user/query/:id?': {
      controller: 'User',
      action: 'query'
    }
    

    リクエストが/user/query/:id?作成されていれば/user/query/:id?ルートとは独立してHTTP動詞では、アクションは同じになります。 RESTfulおよびショートカットのルートとは異なり、アクションルートでは、コントローラに対応するモデルファイルがある必要ありませ 。あなたはコントローラ定義した場合を意味し、 /api/controllers/FooController.jsファイルが、中に無いモデル/api/models/Foo.jsファイルを、とはRESTfulなまたはショートカットルートはないだろう/fooが、まだ行動ルートが存在します利用可能です。

一致する経路の順序

リクエストが来ると、セイルは最初に明示的に定義されたルートとルートを照合します。一致する場合、それ以上の照合は行われず、対応するアクションが実行されます。しかし、それが一致しない場合、ルートは最初に青写真のアクションルートとマッチし、残りのルートと一致しない場合、そしてショートカットルートのいずれとも一致しない場合にマッチします。したがって、/ /config/routes.jsファイルに次のようなエントリがある場合、

  '/user/query/:id?': {
    controller: 'User',
    action: 'find'
  }

queryアクションルートが機能することは期待できません。同じルートなのでqueryアクションルートがと照合されるだろう、明示的にルートを定義し、 findユーザコントローラのアクションが実行されます。

青写真のアクション

青写真のアクション(青写真のアクションルートと混同しないでください)は、同じ名前のモデルを持つコントローラで動作するように設計された汎用アクションです( ParrotControllerParrotモデルが必要です)。それらをアプリケーションのデフォルト動作と考えてください。たとえば、あなたが持っている場合はUser.jsモデルと空のUserController.jsコントローラをfindcreateupdatedestroypopulateaddremoveあなたがそれらを記述することなく、アクションが暗黙的に存在します。

デフォルトでは、青写真のRESTfulルートとショートカットルートは、対応する青写真のアクションにバインドされています。ただし、特定のコントローラーに対して、そのコントローラーファイル( ParrotController.find )でカスタムアクションを作成することで、青写真のアクションをオーバーライドすることができます。また、独自のカスタム青写真のアクションを作成して、アプリケーションのどこにでも青写真のアクションをオーバーライドできます。

帆は、次の青写真の動作で出荷されます:

  • 見つける
  • findOne
  • 作成する
  • 更新
  • 破壊する
  • 人口
  • 追加する
  • 除去する

Blueprintルートの無効化

  • グローバル基準 :Blueprint APIの設定は/config/blueprint.jsファイルで定義されています。そこからすべてのコントローラの3つのタイプのブループリントルートをすべて有効または無効にすることができます。たとえば、すべてのコントローラの青写真のショートカットルートを無効にしたいが、アクションルートと残りのルートを有効にしたい場合、/config/blueprint.jsは次のようにする必要があります/config/blueprint.js

    module.exports.blueprints = {
      action: true,
      rest: true,
      shortcut: false
    }
    
  • コントローラごとに :コントローラ定義で/config/blueprints.jsの設定をコントローラごとに上書きすることも/config/blueprints.jsます。コントローラの定義に '_config'キーを定義し、設定に上書きする設定オブジェクトを割り当てますこのファイルに例として、ユーザコントローラに対してのみショートカットルートを有効にしたいが、それ以上のコントローラでは使用できないようにするには、上記の青写真設定で、ユーザコントローラに次のキー値ペアを設定する必要があります。

    module.exports = {
      _config: {
        actions: true,
        shortcuts: true,
        rest: true
      }
    }
    
    


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow