Meteoro de Ferro Roteador do lado do servidor ganchos
-
21-12-2019 - |
Pergunta
Usando Ferro roteador é possível adicionar ganchos assim:
// 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']});
Veja: https://github.com/EventedMind/iron-router#using-hooks
Mas as documentações não diz como fazer estes ganchos "lado servidor".
A ideia é criar um gancho que irá supervisionar a publicação de Coleções para todas as rotas, exceto para uma ou duas rotas específicas onde eu quero mais controle sobre o que é publicado.
Solução
Ferro Roteador é apenas o mesmo, tanto no cliente e o servidor e a declaração pode ser feita em um diretório/arquivo que está disponível para o cliente e o servidor.
Por padrão, a declaração de rotas para o cliente.Se você quer uma rota a ser do lado do servidor e, em seguida, você declarar explicitamente isso incluindo where: 'server'
.
Retirado do oficial de documentos:
Definição de rotas e configurar o Roteador é quase idêntico no servidor e o cliente.Por padrão, as rotas são criadas como cliente de rotas.Você pode especificar que uma rota é pretendido para o servidor, fornecendo uma propriedade onde a estrada como esta:
Router.map(function () {
this.route('serverRoute', {
where: 'server',
action: function () {
// some special server side properties are available here
}
});
});
Note-se que se deve ser colocado no Roteador.mapa, não no controlador.
De ação do servidor de funções (RouteControllers) têm diferentes propriedades e métodos disponíveis.Ou seja, não há nenhum processamento no servidor ainda.Assim, o método de renderização não está disponível.Além disso, você não pode waitOn assinaturas ou chamar o método espera no servidor.Servidor de rotas de obter o mínimo de pedido de resposta, e próximo propriedades do pedido de ligação, bem como os parâmetros de objeto, assim como no cliente.
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');
}
});
});
Como você vê, não é apenas uma convenção de nomenclatura, portanto, você pode dizer algo como isto:
Router.before(someFilter, {only: ['clientRoute1', 'clientRoute2', 'serverRoute1']});
ou
Router.before(someOtherFilter, {except: ['clientRoute3', 'clientRoute4', 'serverRoute2']});
assim como faria normalmente.