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']});
就像平常一样。