req.options
は、アプリケーションのアクションで使用可能な、リクエストに依存しない設定の辞書(プレーンなJavaScriptオブジェクト)です。
req.options
の目的は、アクションのコードが、存在する場合は、その設定されたルートオプションにアクセスできるようにすることです。(簡単に言うと、「ルートオプション」とは、ルートターゲットで提供される追加のプロパティのことです。)
Sails のルートオプションは、当初、組み込みのBlueprintアクションをより柔軟に設定するための方法として考案されました。
一部の特別な設定は、常に特定のBlueprintアクションに提供する必要があります。これにより、アプリケーションは、Blueprintアクションがどのモデル/関連付けを対象とするかを伝えることができます。例えば、req.options.model
は、特定のBlueprintアクションが対象とするモデルのIDです。そして、関連付けを直接含むBlueprintアクションの場合、req.options.alias
は、関連付け属性の名前を示します。
アプリケーションでこれを利用して、Blueprintアクションを任意のカスタムルートにバインドすることができます。例えば、config/routes.js
の次のカスタムルートを考えてみてください。
'GET /foo/bar': {
action: 'user/find',
model: 'user'
}
/foo/bar へのGETリクエストが到着するたびに、find
Blueprintアクションが実行され、req.options.model
は user
として使用できます。(これは、組み込みの汎用的な「find」Blueprintアクションが、Userモデルと通信する必要があることを知る方法です。)
Blueprintアクションをさらにカスタマイズする必要がある場合?ほとんどの場合、これを行う最も簡単で(そして最も保守可能な)方法は、カスタムアクションを作成することです。Blueprint API から独自の カスタムアクションを作成する場合、最初に概念 > アクションとコントローラーを確認することをお勧めします。
完全に上書きすることなく、Blueprintアクションの動作の追加の側面をプログラムで変更できる中間的な方法があることに注意してください(例:リクエストを調べて、モデルにアクセスするときにBlueprintアクションが使用する基準を決定します)。詳しくはリファレンス > sails.config.blueprints > parseBlueprintOptions の使用方法を参照してください。
独自のカスタムルートオプションを設定および使用することも可能です。例えば、Sails用のGitHubプラグインを構築しているとします。GitHubからのWebhookリクエストの処理をサポートするために、プラグインは、プラグインのユーザーがアプリケーション内の任意のルートに簡単にバインドできる、github/receive-event
のような汎用的な設定可能なアクションを登録できます。
'POST /my-cool-webhooks/github/doings-and-things/incoming': {
action: 'github/receive-event',
}
しかし、今度は、プラグインの汎用的なreceive-event
アクションの目的の1つが、着信したGitHubイベントを表すレコードをアプリケーションのデータベースに保存すること(例:将来の使用のために追跡すること)だとします。そのためには、汎用的なアクションは使用するモデルを知る必要があります。そこで、Sailsの組み込みBlueprintアクションと整合性のある簡単なアプローチを使用して、プラグインは次のような使用方法をサポートできます。
'POST /my-cool-webhooks/github/doings-and-things/incoming': {
action: 'github/receive-event',
model: 'repoactivity'
}
一方、プラグインでは、登録するアクションは次のようになります。
module.exports = function receiveEvent(req, res) {
if (_.isUndefined(req.options.model) || !sails.models[req.options.model]) {
return res.serverError(new Error('Invalid configuration: To use `github/receive-event`, please set this route's `model` to the identity of one of your app\'s models. (Currently, it is `'+req.options.model+'`, which cannot be used.)'));
}
var GitHubEventModel = sails.models[req.options.model];
GitHubEventModel.create({
raw: req.allParams(),
githubId: req.param('id'),
// ...
// ... etc. (see https://developer.github.com/webhooks/#events)
}).exec(function(err) {
if (err) { return res.serverError(err); }
return res.ok();
});
};
このタイプのプラグインの作成の詳細については、概念 > Sailsの拡張 > Hooksを参照してください。