生成和定义的sailsjs路由

时间:2014-11-04 15:08:02

标签: node.js sails.js

我正在尝试获取我的服务提供的API方法的完整列表。这主要是为了显示我们通过所有控制器暴露的API调用。我知道我可以反省sails.config.routes对象来获取已定义路由的列表。但是,似乎没有一种简单的方法来获取“自动”为您生成的蓝图路线列表。现在有一种想法是我可以假设一种特定的模式,其中有3种不同类型的蓝图生成(动作,休息和快捷方式)。对于一个简单的事实来说这是一个坏主意,即这个框架处于初期阶段并且事情可能会发生变化。我宁愿依靠一个方法来根据真正定义的内容获取此列表,如果它确实发生了变化,那么我的代码应该自动反映出来。

1 个答案:

答案 0 :(得分:1)

所以我挖到了风帆,并且在风帆的帮助下,帆依靠快车进行所有路线。

在第35行的sails source 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服务,并且只反映所有可用的方法。使这项服务更容易使用,并且无需手动删除任何类型的映射。

享受!

相关问题