node.js - 覆盖 Iron Router Meteor 中的路线

标签 node.js meteor iron-router telescope

我尝试了两种方法。首先是定义一条具有相同模式的新路线,但它给我错误消息“路径已存在”。

然后我也尝试从路由器获取现有的RouteController并更改它,但进展并不顺利

具体来说,我正在尝试覆盖项目 Telescope 中的以下路线。

https://github.com/TelescopeJS/Telescope/blob/master/packages/telescope-posts/lib/routes.js#L159-L162

最佳答案

一种方法是修改现有的路线选项。

// Running it in Meteor.startup is only necessary because Telescope
// defines the route at startup
Meteor.startup(function () {
  // Find a route by name
  var route = Router.routes.posts_default;
  // OR find a route by path
  var route = Router.findFirstRoute('/');

  // Override existing route options
  _.extend(route.options, {
    data: //...
    // Other route options...
  });
});
<小时/>

另一种方法是删除路由并重新创建它。

使用通过名称删除路由的函数,

function removeRouteByName (routeName) {
  var routes = Router.routes;
  var route = routes[routeName];
  if (!route) return false;  // Returns false if route is not found

  // Remove route from Router
  delete routes[routeName];
  delete routes._byPath[route.path()];
  var routeIndex = routes.indexOf(route);
  if (routeIndex >= 0) routes.splice(routeIndex, 1);

  // Remove route handler from MiddleWareStack
  delete Router._stack._stack[routeName];
  Router._stack.length -= 1;

  return true;  // Returns true when route is removed
}

我们可以通过以下方式删除并重新创建路线

// Running it in Meteor.startup is only necessary because Telescope
// defines the route at startup
Meteor.startup(function () {
  removeRouteByName('posts_default');

  Router.route('/', {
    name: 'posts_default',  // Use the same name
    //Add your parameters...
  });
});

尝试在此 repository 中运行 Telescope您应该看到路线 / 已更改。

关于node.js - 覆盖 Iron Router Meteor 中的路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31128066/

相关文章:

java - 如何使用 maven 部署 node.js 应用程序?

javascript - Mocha before 在 It block 之后执行

node.js - Angular 4 和 SEO

java - 在监控应用中使用 Meteor 框架

javascript - 发现 meteor 取消订阅?

meteor - meteor.js:通过电子邮件查找用户

javascript - 使用iron-router时,onRender什么时候执行?

javascript - Meteor Router.go 不传递参数

node.js - 如何告诉 webpack 忽略 Node 模块,包括核心模块和从 npm 安装的模块?

Meteor|iron-router|Router.map和Router.route有什么区别