Как настроить tomcat 7 для работы с react-router-dom в реакции?

У меня есть проект в реакции, он хорошо работает в версии для разработки, но когда я его экспортирую (bundle.js) и переношу на кот, он не распознает маршруты react-router-dom.

Нужно ли мне что-то настраивать в tomcat? Я нашел несколько примеров, но они не работали для меня:

маршрутизация реакции может обрабатывать другой путь URL, но tomcat возвращает 404 недоступных ресурсов

https://github.com/gildata/RAIO/issues/138

Это мой index.jsx:

import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import { IntlProvider } from 'react-intl';
import { Provider } from 'react-redux';
import store from 'src/app/store';
import App from 'src/app/App';

render(
  <Provider store={store}>
    <IntlProvider locale="en">
      <BrowserRouter>
        <App />
      </BrowserRouter>
    </IntlProvider>
  </Provider>,
  document.getElementById('contenedor'),
);

Это App.jsx

import React from 'react';
import { Switch, Route, Redirect } from 'react-router-dom';
import Login from 'src/app/Login';
import Menu from 'src/app/Menu';

const logueado = localStorage.getItem('tLogueado');

const App = () => (
  <main>
    <Switch>
      <Route exact path="/login" render={() => (logueado ? (<Redirect to="/onix" />) : (<Login />))} />
      <Route exact path="/onix" render={() => (logueado ? (<Menu />) : (<Redirect to="/login" />))} />
    </Switch>
  </main>
);

export default App;

Я делаю что-то не так? пожалуйста, наберитесь терпения, я новичок в реакции.


person Adrian Natividad    schedule 02.02.2018    source источник
comment
Что именно является фактической ошибкой? По какому URL вы пытались перейти и что вы видите? Вы получаете 404? Вы запускаете Tomcat локально на localhost? Tomcat не знает ни о каких маршрутах, определенных в вашем внешнем приложении. Вы должны настроить его так, чтобы он отвечал вашим приложением на каждый запрос ниже baseUrl. Оттуда ваше приложение будет обрабатывать маршрутизацию. С точки зрения tomcat существует только одна страница, которая является вашим реагирующим приложением.   -  person trixn    schedule 02.02.2018
comment
Если я запускаю Tomcat локально, пытаясь перейти к маршруту: localhost:8080/login. ошибка: HTTP-статус 404 - /login Как я могу настроить его для ответа ниже baseUrl?   -  person Adrian Natividad    schedule 02.02.2018
comment
Он должен быть настроен так, чтобы всегда отвечать вашим приложением, независимо от того, запрашиваете ли вы /login или /onix или что-то еще, потому что ваше приложение обрабатывает маршруты ниже самого /. Также вы обычно должны указать маршрут по умолчанию, если ни один маршрут не соответствует другим определенным. Но я не знаю, как это сделать в tomcat. Есть ли особая причина, по которой вы хотите использовать tomcat? Чтобы заставить его работать на данный момент, вероятно, достаточно добавить маршрут по умолчанию в ваш реагирующий маршрутизатор, который перенаправляет на /login, а затем открыть его только с помощью localhost:8080/.   -  person trixn    schedule 02.02.2018
comment
Я уже сделал это, но эта ошибка отмечает меня: Error de mapa de fuente: запрос не выполнен со статусом 404 URL-адрес рекурсо: localhost:8080/siag-fe/dist/bundle.js URL-адрес текущей карты: validateNextState.js.map   -  person Adrian Natividad    schedule 03.02.2018
comment
используйте Tomcat RewriteValve, см. здесь   -  person egerardus    schedule 10.06.2019


Ответы (1)


есть два возможных пути решения этой проблемы

  1. Используйте HashRouter вместо BrowserRouter

or

  1. Используйте базовое имя, например: <BrowserRouter basename="/calendar"/>

проверьте эту ссылку как- развернуть-реагировать-приложение-в-подкаталог

person Mohit Bhagat    schedule 01.10.2018