2016-11-01 4 views
0

私はsailsjsプロジェクトに取り組んでいます。私はapiフォルダ内で使用可能なコントローラをすべて抽出/検索する必要があります。私はまた、それらのコントローラー内で利用可能なすべてのアクション(メソッド)を見つける必要があります。sailsjsコントローラ内のすべてのコントローラ名とアクション(メソッド)名を取得

コントローラの名前を取得するという愚かな方法は、おそらくディレクトリに移動してすべてのファイル名を見つけることですが、どのようにしてアクションを取得できますか?私はコントローラとアクション名を取得する簡単な方法/方法があるべきだと思いますか?

編集:私は次の手順を実行して、コントローラ名を取得することができています :例えば私のコントローラはそれに1つの作用を有する

getControllers: function(req,res){ 
    var _ = require('lodash'); 
    var controllerList = []; 

    var controllers = _(sails.controllers).toArray().value(); 
    for (var i=0;i<controllers.length;i++){ 
    controllerList.push(controllers[i].globalId); 
    } 
    res.json({error:null, data:controllerList}); 
} 

場合は、私が代わりに1つの結果を返すので、次のことをしようとしたとき、それは4を返し、その結果は、私はちょうど、アクションの名前を必要とするものではありません非常に読みやすいします

var actons = _(sails.controllers.controllerName).toArray().value(); 
for (var i=0;i<actions.length;i++){ 
    actionList.push(controllers[i].action); 
} 

私が何か間違ったことをやっていますか?私はほとんどの情報が帆の中に保存されていることを理解しています。だから私は間違ったキーワードを使用していますか? 'sails.controllers..action'は間違っていますか?長い時間を検索した後、私は 'globalId'がコントローラ名のキーワードであることを発見しました。

答えて

2

このコードは、すべてのコントローラ名にアクション名を表示します。これで、あなたは何でもできます。

_.each(sails.controllers, function(controller, controllerId) { 
    _.each(controller, function(action, actionId) { 
     if (actionId != 'sails' || _.isString(action) || _.isBoolean(action) || action === false) { 
      return; 
     } 
     console.log(controllerId + ' ' + actionId); 

    }); 
}); 
+0

あなたの解決策は素晴らしいです! 1つの間違いを除いて私は思う。 "actionId!= 'sails'"を入れるのではなく、 "action == 'sails'"に変更するとうまくいきました! – Cherple

関連する問題