【问题标题】:Meteor Iron Router server-side hooksMeteor Iron Router 服务器端钩子
【发布时间】:2014-03-27 23:13:57
【问题描述】:

使用 Iron 路由器可以像这样添加钩子:

// 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-hooks

但是文档并没有说明如何使这些钩子成为“服务器端”。

这个想法是创建一个挂钩来监督所有路由的发布集合,除了一两个特定路由,我希望更好地控制发布的内容。

【问题讨论】:

    标签: javascript meteor iron-router


    【解决方案1】:

    Iron Router 在客户端和服务器上都是一样的,声明可以在客户端和服务器都可用的目录/文件上完成。

    默认情况下,声明的路由是给客户端的。如果您希望路由成为服务器端,那么您可以通过包含 where: 'server' 来明确声明。

    取自official docs

    在服务器和客户端上定义路由和配置路由器几乎相同。默认情况下,路由被创建为客户端路由。您可以通过向路由提供 where 属性来指定路由是针对服务器的,如下所示:

    Router.map(function () {
      this.route('serverRoute', {
        where: 'server',
    
        action: function () {
          // some special server side properties are available here
        }
      });
    });
    

    注意where必须放在Router.map中,而不是控制器上。

    服务器操作函数(RouteControllers)有不同的属性和方法可用。也就是说,服务器上还没有渲染。所以渲染方法不可用。此外,您不能 waitOn 订阅或调用服务器上的 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']});
    

    就像平常一样。

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 2015-02-27
      • 1970-01-01
      • 2013-09-03
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多