meteor iron-router 并获取 accounts-entry 包的所有路由的名称

meteor iron-router and getting the names of all routes for the accounts-entry package

流行的 accounts-entry 软件包中有一个与 iron-router 相关的错误。我相信 iron-router 的更高版本已更改为作为中间件更好地工作,因此调用 Router.routes

在此 file 的第 87 行使用了以下代码:

_.each Router.routes, (route)->
  exclusions.push route.name
# Change the fromWhere session variable when you leave a path
Router.onStop ->
  # If the route is an entry route, no need to save it
  if (!_.contains(exclusions, Router.current().route?.getName()))
    Session.set('fromWhere', Router.current().path)

不幸的是,在 Router.routes 上执行 _.each 似乎不再是一个有效的解决方案,因为 Router.routes 不会 return 并且对象中具有 .name 属性它。

你如何获得最新的iron-router的所有路由的名称?

这个有点棘手:在最新版本的 iron:router 中,Router.routes 现在被定义为函数数组。

事实是,函数在 JS 中已经有一个默认值 name 属性,其中包含函数在定义时分配的名称。

var myFunc = function funcName(){...};
console.log(myFunc.name); // == "funcName"

幸运的是,在数组的路由项上定义了一个getName方法,您可以使用这段代码遍历所有路由并获取它们的名称:

_.each(Router.routes, function(route){
  console.log(route.getName());
});