React-маршрутизатор с Saga-сервером Перенаправление рендера

Проблема в том, что у меня есть первоначальный запрос на выборку, который получает строку запроса с URL-адреса и делает запрос на получение указанной страницы продукта.

Та же логика и маршрутизация используются на стороне клиента и на стороне сервера.

Запрос API выполняется в redux-saga, но, если это не удается (нет соответствующего продукта), сайт уже находится на /product маршрут, и поэтому перенаправление должно произойти.

На стороне клиента это очень просто, так как его можно перенаправить динамически, используя browserHistory или просто window.location.href, но на сервере я должен был бы передать res объект и использование res.redirect и, возможно, использовать две разные функции перенаправления с этим подходом.

Другое решение состоит в том, чтобы поймать это самым лучшим способом; на экспресс index.js во время ReactDOMServer.renderToString(component), а также на конечной точке на стороне клиента при сбое - с другой логикой. Например, представление 404 с экспресс-перенаправлением. Но потому что saga В любом случае, это не самый верхний элемент иерархии. Чтобы выбросить этот 404 и перехватить его в самом верхнем контексте (на экспресс-сервере), нужно передать его вверх и вверх очень "грязным" способом try/catch.

Любые предложения, как решить это с точки зрения правильности? Я действительно не хочу, чтобы логика маршрутизации удваивалась на экспресс-стороне, поэтому я бы предпочел, чтобы она была хорошо обработана с помощью изоморфного кода.

1 ответ

Вы, вероятно, выставляете свое основное состояние, которое будет передано передним кодом. Любые звонки, которые возвращаются из саг, могут обновить это состояние. Мы используем set404() а также set301() действия, когда примитивная сага не возвращает данные, которые мы хотим. Эти действия вызваны, и они устанавливают return404: true или же return301: true в основном государственном объекте. Поэтому, прежде чем визуализировать приложение в строку, мы проверяем этот объект. Если какой-либо из них присутствует, мы возвращаем соответствующий ответ от сервера.

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