У меня есть одностраничное приложение, в котором вся маршрутизация выполняется на клиенте с использованием react-router-dom
.
Мое приложение позволяет использовать набор маршрутов с точным соответствием.
Для любого маршрута из этого набора он будет считаться недействительным, и клиентский код перенаправит вас на маршрут /404-page
.
Итак, Мне нужно сделать то же самое, когда Я выполняю рендеринг на сервере.
Это поток:
- Вы попросите мой сервер
/invalid-route
- Мой код из
react-router
отобразит <Redirect to="/404-page"/>
- Мне нужно будет перенаправить ваш запрос на
/404-page
- Какой код мне следует использовать для этого перенаправления?
Думаю, мне следует установить status = 404
. Потому что этот маршрут не был найден, верно?
Что-то вроде:
// YOU'VE REQUESTED SOME /invalid-route
res.status(404).redirect(ROUTES.NOT_FOUND);
Но теперь вы спросите у моего сервера маршрут /404-page
. Что на самом деле отобразит 404 Page
- Вы запрашиваете
/404-page
- Мой сервер отобразит для вас страницу 404.
- Какой код состояния мне следует использовать для страницы 404?
Следует ли мне использовать 200 Ok
? Поскольку мой /404-page
является действующим и существующим URL-адресом, который фактически что-то отображает?
// NOW YOU ARE REQUESTING MY /404-page
res.status(200).send( // 404 PAGE HTML );
Это правильный способ сделать это?
ОБНОВЛЕНИЕ:
Мой вопрос предполагал что-то не так.
Когда пользователь запрашивает /invalid-url
, вы не можете отправить 404
и перенаправить одновременно.
Потому что следующий код:
// YOU'VE REQUESTED SOME /invalid-route
res.status(404).redirect(ROUTES.NOT_FOUND);
// NOW YOU ARE REQUESTING MY /404-page
res.status(200).send( // 404 PAGE HTML );
Получил следующий результат:
[! [Введите описание изображения здесь] [1]] [1]
перенаправление было выполнено с использованием 302
, хотя я использовал res.status(404).
.
Это вообще не предназначено. Потому что статус 404
не был отправлен.
Итак, я думаю, мы должны перенаправить /invalid-route
с помощью 302
или 301
и отправить 404
для /404-page
Что-то вроде:
// YOU'VE REQUESTED SOME /invalid-route
res.status(302).redirect(ROUTES.NOT_FOUND);
// NOW YOU ARE REQUESTING MY /404-page
res.status(404).send( // 404 PAGE HTML );
UPDATE 2:
Это не работает, как предполагалось, чтобы отправить 301
// THIS SENDS A 302, EVEN THOUGH SETTING 301
res.status(301).redirect(ROUTES.NOT_FOUND);
Чтобы отправить 301 на перенаправление, мне пришлось сделать:
// THIS SYNTAX ALLOWS YOU TO CHOOSE THE STATUS CODE FOR THE REDIRECT
res.redirect(301,ROUTES.NOT_FOUND);
``´
[1]: https://i.stack.imgur.com/jNnfN.png