ExpressJS: перенаправление на URL-адрес, обрабатываемый на стороне клиента

Я использую ExpressJs для бэкэнда и ReactJS для внешнего интерфейса. Сервер работает на локальном хосте: 3000, клиент работает на локальном хосте: 8080. Я хочу перенаправить пользователя на страницу чата после успешного входа в систему. Итак, у меня есть код на сервере:

(req, res) => {
  //doing some authenticate actions up here
  if (/*successful*/) {
    //some actions here
    res.redirect("/chat");
  }

  //actions on failure down here
};

Но после входа в учетную запись я получаю эту ошибку

GET http://localhost:8080/chat 404 (Not Found)

http://localhost:8080/chat существует, и он обрабатывается на стороне клиента, если я наберу его в адресной строке и перейду, я все равно смогу получить доступ к странице чата.

У меня также есть код, который обрабатывает любой запрос, не соответствующий маршрутам сервера, поэтому этот запрос может быть отправлен клиенту для обработки:

app.get("*", (req, res) => {
    res.sendFile(path.join(__dirname, "client/dist/index.html"));
});

Что не так с моим кодом? Я что-то пропустил?

Кстати, вы также можете сделать это на стороне клиента, например, при успешном вызове API, проверить код состояния или условие и перенаправить на свое представление. ........ renderRedirect = () => { if (this.state.redirect) { return <Redirect to='/target' /> } } ..... Like: <Redirect to='/ target' /> Это также предотвратит перезагрузку вашего приложения.

Azeem Aslam 10.04.2019 06:34

Да, сначала я так и сделал. Но я думаю, что будет лучше, если эта работа будет выполняться сервером.

Trí Phan 10.04.2019 07:21

Когда вы используете app.get("*", (req, res) => {, вы должны изменить способ обслуживания статических файлов (чтобы вычислить какой-то путь).

bato3 10.04.2019 07:29

Вы применили аутентификацию на маршрутах на стороне клиента?

Azeem Aslam 10.04.2019 08:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
291
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны перенаправить пользователя после успешного ответа от API. Это не лучше обрабатывается серверной частью, потому что у вас есть одностраничное приложение, которое технически не имеет дополнительных страниц, о которых знает сервер, поэтому вы получаете ошибку 404 при попытке перенаправить на http://localhost:8080/chat. Он знает только о вашем файле index.html, который обслуживает код реагирования ваших пакетов. Причина, по которой вы можете ввести /chat в адресную строку, заключается в том, что ваш пользовательский интерфейс настроен на обработку запросов от используемого вами маршрутизатора. Это не сервер направляет вас туда.

Это должно быть просто, вот пример:

logUserIn = async (userData) => {
  const isAuthed = await authenticateUser(userData)
  if (isAuthed) {
    this.props.history.push('/chat');
  } else {
    console.info('User not found!');
  }
}

О, знаю, я понимаю. Сначала я делал это на клиенте (перенаправлял пользователя после успешного ответа от API), но подумал, что будет лучше, если этим будет заниматься сервер. Спасибо за помощь!

Trí Phan 10.04.2019 08:14

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