ブループリントアクション(暗黙的なブループリントの「アクション」ルートと混同しないでください)は、モデルで動作するように設計された汎用的なアクションです。これらはアプリケーションのデフォルトの動作と考えることができます。たとえば、User.js
モデルがある場合、find
、create
、update
、destroy
、populate
、add
、remove
アクションは、自分で記述しなくても暗黙的に存在します。
デフォルトでは、ブループリントのRESTful ルートとショートカットルートは、対応するブループリントアクションにバインドされます。ただし、特定のコントローラーのブループリントアクションは、そのコントローラーファイルにカスタムアクションを作成することでオーバーライドできます(例:ParrotController.find
)。
Sailsの現在のバージョンには、次のブループリントアクションが同梱されています。
ほとんどのブループリントアクションには、アプリでWebSocketが有効になっている場合に有効になるリアルタイム機能があります。たとえば、findブループリントアクションがソケットクライアントからリクエストを受信した場合、そのソケットは将来の通知をサブスクライブします。その後、updateなどのブループリントアクションを使用してレコードが変更されるたびに、Sailsは特定の通知をパブリッシュします。
特定のブループリントアクションの動作を理解する最良の方法は、リファレンスページ(または上記のリスト)を読むことです。しかし、SailsのブループリントAPIにおけるリアルタイム機能の動作について、より鳥瞰的な視点をお探しの場合、コンセプト > リアルタイムをご覧ください。(詳細が多少古くても構わない場合は、2013年のオリジナルの「Sails.js入門」ビデオをご覧になるのもよいでしょう。)
Sailsのブループリントアクションによって公開されるすべての通知の詳細な内訳については、以下を参照してください。
コントローラーのブループリントアクションは、同じ名前のカスタムアクションを定義することでもオーバーライドできます。
// api/controllers/user/UserController.js
module.exports = {
/**
* A custom action that overrides the built-in "findOne" blueprint action.
* As a dummy example of customization, imagine we were working on something in our app
* that demanded we tweak the format of the response data, and that we only populate two
* associations: "company" and "friends".
*/
findOne: function (req, res) {
sails.log.debug('Running custom `findOne` action. (Will look up user #'+req.param(\'id\')...');
User.findOne({ id: req.param('id') }).omit(['password'])
.populate('company', { select: ['profileImageUrl'] })
.populate('top8', { omit: ['password'] })
.exec(function(err, userRecord) {
if (err) {
switch (err.name) {
case 'UsageError': return res.badRequest(err);
default: return res.serverError(err);
}
}
if (!userRecord) { return res.notFound(); }
if (req.isSocket) {
User.subscribe(req, [user.id]);
}
return res.ok({
model: 'user',
luckyCoolNumber: Math.ceil(10*Math.random()),
record: userRecord
});
});
}
}
あるいは、これを
api/controllers/user/findone.js
にスタンドアロンアクションとして作成したり、actions2を使用したりすることもできました。