.routesroutes機能により、カスタムフックはロード時に新しいルートをSailsアプリケーションに簡単にバインドできます。実装する場合は、routesはbeforeキー、afterキー、またはその両方をキーとするオブジェクトである必要があります。これらのキーの値は、今度はキーがルートアドレスで、値が標準的な(req, res, next)パラメータを持つルート処理関数であるオブジェクトである必要があります。beforeオブジェクトで指定されたルートは、カスタムユーザールート(sails.config.routesで定義されている)とブループリントルートの前にバインドされます。逆に、afterオブジェクトで指定されたルートは、カスタムルートとブループリントルートの後にバインドされます。例として、次のcount-requestsフックを考えてみましょう。
module.exports = function (sails) {
// Declare a var that will act as a reference to this hook.
var hook;
return {
initialize: function(cb) {
// Assign this hook object to the `hook` var.
// This allows us to add/modify values that users of the hook can retrieve.
hook = this;
// Initialize a couple of values on the hook.
hook.numRequestsSeen = 0;
hook.numUnhandledRequestsSeen = 0;
// Signal that initialization of this hook is complete
// by calling the callback.
return cb();
},
routes: {
before: {
'GET /*': function (req, res, next) {
hook.numRequestsSeen++;
return next();
}
},
after: {
'GET /*': function (req, res, next) {
hook.numUnhandledRequestsSeen++;
return next();
}
}
}
};
};
このフックは、beforeオブジェクトで提供された関数を使用してすべてのリクエストを処理し、そのnumRequestsSeen変数をインクリメントします。また、afterオブジェクトで提供された関数を使用して、未処理のリクエスト(カスタムルート設定またはブループリントを介してアプリケーションでバインドされていないルート)を処理します。
フックで設定された2つの変数は、
sails.hooks["count-requests"].numRequestsSeenとsails.hooks["count-requests"].numUnhandledRequestsSeenとして、Sailsアプリケーションの他のモジュールで使用できます。