ExpressJS: перенаправление на URL-адрес, обрабатываемый на стороне клиента - PullRequest
1 голос
/ 10 апреля 2019

Я использую 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"));
});

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

1 Ответ

2 голосов
/ 10 апреля 2019

Вы должны перенаправить пользователя после успешного ответа от 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.log('User not found!');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...