Доступ к угловой компоненте 6 через URL с использованием ZUUL в качестве прокси - PullRequest
0 голосов
/ 05 января 2019

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

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

Проблема возникает, когда я развертываю свое приложение, завернутое в пружинную банку, и пытаюсь получить доступ к маршрутам из 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-кода navbar:

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

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

PS: здесь не разработчик внешнего интерфейса.

1 Ответ

0 голосов
/ 05 января 2019

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

@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

...