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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top