Angular добавление дополнительной логики для обработки 404 на маршрутах Angular

У меня есть сайт angular, размещенный на S3, и у меня есть настройка маршрута 404 (я использую хэш), если кто-то, например, делает

mysite/#/gibberish

переходит в

mysite/#/404

а в ведро s3 мы имеем правило переадресации для

mysite/gibberish

переходит в

mysite/404.html

все хорошо

Теперь я просто хочу добавить дополнительную логику сверху, если кто-то набирает

MySite/CustomerID

который является 404, чтобы каким-то образом перенаправить его на контроллер angular, чтобы я мог отправить этот запрос на правую страницу.

Итак, как-то в моем перенаправлении в правиле S3 добавьте reg exp для некоторого входящего запроса и вместо того, чтобы служить 404.html, отправьте его i.e. mysite/#/handlethis

Возможно ли это?

Ответ 1

В зависимости от вашего маршрутизатора вы можете сделать что-то вроде следующего (это то, что мы сделали (ну, не совсем это, но близко)):

Ui-маршрутизатор

app.config(function ($urlRouterProvider) {
  var regx = /\/#\//; // match against /#/

  $urlRouterProvider.otherwise(function ($state, $location) {
    if (!regx.test($location.path()) { // if no match
      $state.go('customHandlingState', /** params **/, /** configuration **/ }); 
      // Transition to your custom handler state, with optional params/config. 
    }
  });
});

Вы можете связать это с пользовательскими обработчиками stateChange[Start|Stop|Error|Success] в блоке run вашего приложения, чтобы настроить его по своему вкусу.

Я приведу пример того, как это сделать с ngRoute, но я отказался от ngRoute два года назад и с тех пор не оглядывался назад. Как таковой у меня нет предложения дать, и я не смог найти решение проблемы, которую вы представляете.

Я бы сильно предлагал вам отказаться от части S3 этого рецепта, так как это облегчит вашу жизнь, когда дело доходит до маршрутизации на стороне клиента (исходя из личного опыта здесь, это мое мнение о вопрос - не факт) и обрабатывать ваш 404's/500's на клиенте с помощью пользовательских обработчиков состояний.

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

Я полагаю, что мой "встречный вопрос"; Что делать вам от использования правил переадресации S3? Чтобы лучше понять потребности и цели здесь.


Некоторые справочные материалы:

Ответ 2

Я бы предложил использовать routeParams https://docs.angularjs.org/api/ngRoute/service/ $routeParams

маршрут будет выглядеть так: /MySite/: чид

то доступ к идентификатору с контроллером: $ routeParams.cid

Надеюсь, это поможет

Ответ 3

Вы можете вручную настроить свой сервер, чтобы всегда обслуживать ваш index.html(ваш основной файл html, который включает ссылку на angular script) для всех входящих HTTP-запросов. Маршрутизация клиента будет обрабатываться с помощью Angular