![](/img/trans.png)
[英]How to generate images server-side in Meteor and serve them via Iron Router?
[英]Meteor Iron Router server-side hooks
使用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
但是文档没有说明如何使这些挂钩成为“服务器端”。
这个想法是创建一个钩子,该钩子将监督所有路线的发布集合,但我希望对发布内容进行更多控制的一条或两条特定路线除外。
Iron Router在客户端和服务器上都是相同的,并且声明可以在客户端和服务器都可用的目录/文件中完成。
默认情况下,声明的路由用于客户端。 如果要使路由成为服务器端,则可以通过包含以下内容来明确声明where: 'server'
。
取自官方文档 :
在服务器和客户端上,定义路由和配置路由器几乎相同。 默认情况下,路由被创建为客户端路由。 您可以通过为路由提供一个where属性来指定该路由用于服务器:
Router.map(function () {
this.route('serverRoute', {
where: 'server',
action: function () {
// some special server side properties are available here
}
});
});
请注意,必须将其放置在Router.map中,而不是控制器上。
服务器操作功能(RouteControllers)具有可用的不同属性和方法。 即,服务器上尚无渲染。 因此render方法不可用。 另外,您不能使用waitOn订阅或在服务器上调用wait方法。 服务器路由获得连接请求的裸请求,响应和下一个属性,以及客户端中的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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.