使用铁路路由器可以添加钩子,如:

// this hook will run on almost all routes
Router.before(mustBeSignedIn, {except: ['login', 'signup', 'forgotPassword']});

// this hook will only run on certain routes
Router.before(mustBeAdmin, {only: ['adminDashboard', 'adminUsers', 'adminUsersEdit']});
.

请参阅: https://github.com/eventedmind/iron-router#using-钩子

但是文档没有说如何使这些钩子“服务器侧”。

这个想法是创建一个钩子,除了一个或两个特定路由,除了我想要更多地控制发布的内容之外,它将监督所有路由的钩子。

有帮助吗?

解决方案

Iron路由器在客户端和服务器上都是相同的,并且可以在客户端和服务器上使用的目录/文件上完成声明。

默认情况下,声明的路由适用于客户端。如果您希望路由成为服务器端,那么您明确声明如此通过包括where: 'server'

官方文档

定义路由和配置路由器在服务器和客户端上几乎相同。默认情况下,路由将创建为客户端路由。您可以指定通过提供这样的路由的属性来指定服务器的路由:

Router.map(function () {
  this.route('serverRoute', {
    where: 'server',

    action: function () {
      // some special server side properties are available here
    }
  });
});
.

请注意,必须放在路由器上的位置。

服务器操作功能(RouteControllers)具有不同的属性和方法可用。即,服务器上没有渲染。所以渲染方法不可用。此外,您不能支持订阅或在服务器上调用WAIT方法。服务器路由获取Connect请求的裸露请求,响应和下一个属性,以及在客户端中类似的Params对象。

Router.map(function () {
  this.route('serverFile', {
    where: 'server',
    path: '/files/:filename',

    action: function () {
      var filename = this.params.filename;

      this.response.writeHead(200, {'Content-Type': 'text/html'});
      this.response.end('hello from server');
    }
  });
});
.

如您所见,只有一个命名约定,因此您可以说明这样的内容:

Router.before(someFilter, {only: ['clientRoute1', 'clientRoute2', 'serverRoute1']});
.

Router.before(someOtherFilter, {except: ['clientRoute3', 'clientRoute4', 'serverRoute2']});
.

就像你一样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top