Host Angular 7 App в Wildfly как статический контент - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь обслуживать приложение Angular 7, используя стратегию определения пути на сервере приложений Wildfly.

Мне удалось добавить приложение в качестве статических ресурсов, используя статический обработчик файлов.Таким образом, он доставляется правильно, когда запрашивается точный путь.Например, запрос http://my-wildfly-server/myApp/ отправляет index.html моего приложения.

Поскольку я использую стратегию определения местоположения, файл index.html должен быть также отправлен клиенту для суб-ссылок.Например, запрос http://my-wildfly-server/myApp/my/route должен также отправить index.html моего приложения.

Это подводит меня к моему актуальному вопросу: можно ли настроить Wildfly или подсистему Undertow с каким-то фильтром, равнымtry_file правило nginx?Другими словами: подайте правильный файл, если он существует для определенного запроса, например, http://my-wildfly/myApp/styles.css, или по-другому вернитесь к index.html и позвольте Angular позаботиться о маршруте?

Если возможно, я бы хотелчтобы не связывать мое WebApp в WAR-файл или изменить его на использование стратегии определения местоположения хэша ...

Ответы [ 2 ]

0 голосов
/ 30 июля 2019

Просто ради полноты я опубликую здесь другое мое решение для достижения моей первоначальной цели.:) Как я описал в комментариях к ответу @ Tyrone, в итоге я скомпоновал скомпилированное приложение Angular в WAR-файл и добавил следующие файлы в папку WEB-INF:

jboss-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <context-root>/</context-root>
</jboss-web>

Я хотел, чтобы мое веб-приложение размещалось в корне веб-сервера.Поэтому context-root - это / ...

undertow-handlers.conf

path-prefix('/api') -> done
regex('^(.*\/)(.*\.[a-zA-Z0-9]{2,5})$') -> done
path-prefix('/en') -> rewrite('/en')
path-prefix('/de') -> rewrite('/de')
path-prefix('/') -> rewrite('/en')

Все мои /api вызовы должны идти непосредственно на соответствующий маршрут (настроенный в WAR-API).Файл).Вторая строка с регулярным выражением гарантирует, что каждый вызов чего-то, что, скорее всего, является файлом, также проходит напрямую ... Поскольку у меня есть многоязычное приложение, мне нужно перенаправить различные языки в файл index.htmlправильная папка (строки 3 и 4).И, наконец, что не менее важно, при попадании в корневой каталог веб-сервера я хочу перенаправить на язык по умолчанию, который в моем случае - английский (строка 5).

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

0 голосов
/ 24 июня 2019

У меня недавно была похожая проблема, из 404, когда запрашивалось обновление.Мой первоначальный веб-поиск привел к необходимости перезаписи URL.Следующее решило мою проблему: 1 - Фильтр Ref для правила перезаписи

<filter-ref 
 name="angular-refresh"
 predicate="not equals(%R, '/') and not equals(%R, '/index.html') and not path-prefix('/assets/')
 and not regex('^\/.*.(js|js.map)$') and not regex('^\/.*.(css)$')
 and not regex('^\/.*.(jpe?g|png|gif|svg)$') and not regex('^\/.*.(eot|ttf|woff|woff2)$')
 and regex('^(.*)$')"
/>

Фильтр выше собирает для меня общие ресурсы, которые являются реальными файлами, а затем маршруты, управляемые Angular, фильтр - одна строка,только что добавленные разрывы строк для ясности.

2 - Правило перезаписи

<rewrite name="angular-refresh" target="/index.html" redirect="false"/>

Один важный момент, который следует отметить в правиле перезаписи: redirect="false", при этом маршрут сохраняется в адресной строке.

Надеюсь, это поможет вам решить вашу текущую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...