Meteor железный роутер-маршрутизатор серверные крюки

StackOverflow https://stackoverflow.com//questions/22019143

  •  21-12-2019
  •  | 
  •  

Вопрос

Использование железного маршрутизатора Можно добавлять такие крючки так:

// 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-Крючки

Но документация не говорит, как сделать эти крючки «Server Side».

Идея состоит в том, чтобы создать крючок, который будет контролировать издательские коллекции для всех маршрутов, за исключением одного или двух конкретных маршрутов, где я хочу больше контроля над тем, что публикуется.

Это было полезно?

Решение

Железный маршрутизатор - это то же, как на клиенте, так и на сервере, и и декларации могут быть выполнены в каталоге / файле, который доступен для клиента, так и сервера.

По умолчанию объявленные маршруты для клиента. Если вы хотите маршрут, чтобы быть на стороне сервера, вы явно заявляете, так как where: 'server'.

Взятые из Официальные документы :

Определение маршрутов и настройка маршрутизатора практически идентична на сервере и клиенте. По умолчанию маршруты создаются как клиентские маршруты. Вы можете указать, что маршрут предназначен для сервера, предоставляя а в том, где свойство маршруту, как это:

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

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

Обратите внимание, что где должны быть размещены в маршрутизаторе. Руководство, а не на контроллере.

Функции действия сервера (RouteControllers) имеют разные свойства и доступные способы. А именно, на сервере пока нет рендеринга. Таким образом, метод рендера недоступен. Кроме того, вы не можете выбрать подписки или вызовите метод ожидания на сервере. Серверные маршруты Получите голый запрос, ответ и следующие свойства запроса CONCEN, а также объекта параметров, как и в клиенте.

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 с атрибуция
Не связан с StackOverflow
scroll top