Pregunta

Uso del enrutador de hierro Es posible agregar ganchos así:

// 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']});

Ver: https://github.com/eventedmind/iron-router#using-ganchos

Pero las documentaciones no dicen cómo hacer estos ganchos "lado del servidor".

La idea es crear un gancho que supervisará las colecciones de publicaciones para todas las rutas, excepto en una o dos rutas específicas donde quiero más control sobre lo que se publica.

¿Fue útil?

Solución

El enrutador de hierro es solo el mismo en el cliente y el servidor y las declaraciones se pueden realizar en un directorio / archivo que está disponible tanto para el cliente como para el servidor.

De forma predeterminada, las rutas declaradas son para el cliente. Si desea que una ruta sea el lado del servidor, entonces lo declara explícitamente, por ejemplo, al incluir where: 'server'.

Tomado de la documentos oficiales :

Definir rutas y configurar el enrutador es casi idéntico al servidor y el cliente. De forma predeterminada, las rutas se crean como rutas de clientes. Puede especificar que una ruta está diseñada para el servidor al proporcionar una propiedad en la ruta como esta:

Router.map(function () {
  this.route('serverRoute', {
    where: 'server',

    action: function () {
      // some special server side properties are available here
    }
  });
});

Tenga en cuenta que, donde se debe colocar en el enrutador.map, no en el controlador.

Funciones de acción del servidor (rutasControllers) tienen diferentes propiedades y métodos disponibles. A saber, todavía no hay renderizado en el servidor. Así que el método de render no está disponible. Además, no puede esperar suscripciones o llamar al método de espera en el servidor. Las rutas del servidor obtienen la solicitud, la respuesta y las próximas propiedades de la solicitud de conexión, así como el objeto de parámetros como en el 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 ves, solo hay una convención de nombres, por lo que puede indicar algo como esto:

Router.before(someFilter, {only: ['clientRoute1', 'clientRoute2', 'serverRoute1']});

o

Router.before(someOtherFilter, {except: ['clientRoute3', 'clientRoute4', 'serverRoute2']});

como lo haría normalmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top