Доступ к компоненту angular 6 через URL-адрес, используя ZUUL в качестве прокси

У меня есть 2 приложения Spring Boot, одно действует как поставщик данных, а одно - просто оболочка для моего приложения Angular 6, чтобы его можно было развернуть на сервере с java -jar JAR_NAME.

Работая над своим приложением Angular с помощью angular-cli и запуская его с ng serve, я вижу первую страницу на http://localhost:4200, которая перенаправляет меня на localhost: 4200 / index. У меня есть другой компонент, сопоставленный с / comp, и при доступе к localhost: 4200 / comp этот новый компонент отображается на странице.

Проблема возникает, когда я развертываю свое приложение, завернутое в spring jar, и пытаюсь напрямую получить доступ к маршрутам из Angular. Мое весеннее приложение обслуживается по адресу localhost: 8999, и при его нажатии я перенаправляюсь на localhost: 8999 / index, и страница загружается нормально. Если нажать кнопку, которая перенаправляет меня на страницу comp, URL-адрес меняется на localhost: 8999 / comp, и ресурсы обслуживаются правильно. Проблема в том, что если я обращаюсь к localhost: 8999 / index или localhost: 8999 / comp, я получаю ошибку 404.

Соответствующие фрагменты кода: From application.yml:

zuul:
  ignoredServices: '*'
  routes:
    g-api:
      path: /loc/**
      url: http://localhost:8443/api

Из app-routing.module.ts:

const routes: Routes = [
  {path: '', redirectTo: '/index', pathMatch: 'full'},
  {path: 'index', component: FirstComp},
  {path: 'comp', component: SecondComp}}

Из навигационной панели html:

 <li class = "n">
        <a class = "na"
           [routerLink] = "['/comp']" >
          <i class = "a"></i>
          <p>comp</p>
        </a>
      </li>

Отметим, что прокси-сервер zuul работает даже при развертывании с помощью Spring, поэтому я могу получать данные из API, развернутого на другом порту. Но если я обновляю или получаю доступ к некоторому компоненту Angular через URL-адрес, я получаю 404.

PS: здесь не фронтенд-разработчик.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
1 241
1

Ответы 1

Как я это исправил:

@Configuration
public class WebApplicationConfig implements WebMvcConfigurer {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/notFound").setViewName("forward:/index.html");
}


@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> containerCustomizer() {
    return container -> {
        container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
                "/notFound"));
    };
}

}

Из Spring настройте все не найденные файлы для перехода к /notFound, затем добавьте ViewController, который служит переадресацией для вашего index.html. Это для весенней загрузки 2

Другие вопросы по теме