2014-11-04 56 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服务,并且只会反映所有可用的方法。使这项服务更容易消耗,并且不需要手动进行任何映射。

享受!