モジュールを作る
/api/services/
以下にmodule.exportsしたモジュールを置けばどのController/Modelからも参照できます。
追記
下記コメントより、lodashが有効になってるためUnderscoreは不要らしいです..まあサンプルとして眺めてください。
例えばフロントエンドで大活躍のUnderscore.js、これをバックエンドでも使いたいことがあります。
underscoreモジュールをインストールして...
$ npm install underscore --save
これを普通に使うのはrequireしたら出来るんですが、UnderscoreのようなユーティリティーモジュールをController/Modelごとに個別で読み込むのは面倒。そんなときはapi/services
以下にラップしたモジュールを置きましょう。
module.exports = (function(){
var _ = require('underscore');
return {
each: _.each,
contains: _.contains
};
})();
これでどの場所からでもrequire()せずに_.each()
で呼び出せます。
ログモジュール
次はログモジュールを作ります。sails.js(node.js)でのログ出力はフロントと同じでconsole.log()
ですが、サーバーサイドということを考えるとこれだと不十分。なのでログモジュールを作り、環境ごとに出力を変更したり、今後の拡張性を考えた作りにしておきましょう。
今私が使っているログモジュールは以下のような感じになっています。業務でSlackを使っているので、問題が発生した場合、観測したい事象が発生した場合はSlackにログを投げるようにしています。
まずはSlackモジュールをインストールして...
$ npm install slack-node --save
以下のコードを/api/services/
に配置します。Slackモジュールに設定する値はリファレンスを元に設定してください。Slack-tokenはSlackのadd service integration
から取得できます。
module.exports = (function(){
var slackNode = require('slack-node');
var slack = new slackNode("slack-token", "team-name");
var postSlack = function(text, callback) {
if (!callback) callback = function(){};
slack.webhook({
channel: '#general',
username: 'bot-bot',
text: text
}, function(err, response) {
if (err) {
callback(err, null);
return;
}
callback(null, response);
});
};
var info = function(msg) {
if (process.env.NODE_ENV === "production") {
postSlack(msg);
}
else {
console.log(msg);
}
};
var debug = function(msg) {
if (process.env.NODE_ENV !== "production") {
console.log(msg);
}
};
var err = function(msg) {
if (process.env.NODE_ENV === "production") {
postSlack(msg);
}
else {
console.log(msg);
}
};
return {
i: info,
d: debug,
e: err
};
})();
これで完了。あとはログを出力したいタイミングで、以下のように呼び出す。Logger.i()
ならローカル環境ならコンソールに、production環境ならSlackにログを投げてくれる。
Logger.i("hoge");