2014-11-04 54 views
1

我想從我的服務中獲得可用的API方法的完整列表。這主要是顯示我們通過所有控制器暴露的API調用。我知道我可以反思sails.config.routes對象來獲取定義的路由列表。然而,似乎沒有一種簡單的方法來獲取「自動」爲您生成的藍圖路線列表。現在有一種想法是,我可以用3種不同類型的藍圖生成(動作,休息和快捷方式)來假設一種特定模式。對於這個簡單的事實,這是一個壞主意,這個框架處於起步階段,而且事情可能會發生變化。我寧願依靠一種方法來根據真正定義的內容來獲取這個列表,如果它確實發生了變化,那麼我的代碼應該自動反映出來。生成和定義的sailsjs路由

回答

1

所以我挖成帆和帆依靠快遞的所有路由在幕後。

在線路35上,我發現這個代碼位帆源initialize.js。

// Create express server 
var app = sails.hooks.http.app = express(); 

所以然後我搜索了其他人如何使用express輸出api。所以這讓我看到了不同的頁面。 http://thejackalofjavascript.com/list-all-rest-endpoints/How to get all registered routes in Express?,他們都非常有幫助。這也讓我意識到,帆是使用3.4.3版本的快遞而不是4.這是相當令人失望的考慮到快遞4已經出來了近一年了。好吧,讓我們談談問題的關鍵。所有內容都存儲在sails.hooks.http.app.routes中,但是路由中存在大量重複,並且本身輸出有點麻煩。這是我能夠以更好的方式輸出它的方式。

//where all routes are stored. 
var routes = sails.hooks.http.app.routes; 


var api = {}; 
var output = []; 
for(var method in routes){ 
    for(index in routes[method]){ 
     var route = routes[method][index]; 
     for(var opt in route){ 
      if(api[method] === undefined){ 
       api[method] = {}; 
      } 
      if(api[method][route.path] == undefined && route.path !== "/*" && route.path !== "/"){ 
       api[method][route.path] = route.params; 
      } 
      //output.push("("+typeof route + ")" + opt + "&nbsp;&nbsp;&nbsp;&nbsp;" + route[opt] + "<br/>"); 

     } 
    } 
} 

for(method in api){ 
    for(route in api[method]){ 
     output.push(method + "&nbsp;&nbsp;&nbsp;&nbsp;" + route); 
    } 
} 
res.send(output.join("<br/>")); 

我希望這對希望實現類似效果的其他人有幫助。我認爲這種類型的數據沒有以更好的方式暴露出來,這有點令人傷心。隱藏在我們的面前,我們必須通過開發者的代碼來尋找和啄食。我的目標是要有一個服務調用,它將暴露一個使用我的api的angularjs服務,並且只會反映所有可用的方法。使這項服務更容易消耗,並且不需要手動進行任何映射。

享受!