Разница между req.url и req.originalUrl в expressjs версии 4

Я пытаюсь реализовать функцию входа в приложение expressJS версии 4. Мне нужно определить, зарегистрирован ли пользователь, прежде чем он сможет выполнить определенные действия. Поэтому у меня есть промежуточное программное обеспечение, называемое isLoggedIn, которое проверяет только, находится ли пользовательский объект в сеансе, если нет, то пользователь перенаправляется на страницу входа. После успешного входа в систему он должен быть перенаправлен на исходный URL.

 app.get('/someaction', isLoggedIn, 'actual function to be executed'); 

Теперь внутри метода isLoggedIn я вижу, что req.url и req.originalUrl содержат запрошенное действие. Однако, если пользователь не вошел в систему, при переадресации на страницу /login, как req.url, так и req.originalUrl имеет "/login" в качестве содержимого. Из того, что я читал здесь, я могу переопределить req.url для внутренней маршрутизации. Но в моем случае как req.url, так и req.originalUrl получает действие "/login". Что я делаю неправильно?

Ответ 1

Проблема в том, что на ваш сервер есть два совершенно разных запроса. Запрос страницы /login ничего не знает о странице, которую клиент запросил до этого. Поэтому, когда вы перенаправляетесь на страницу /login, вам нужно где-то сохранить информацию о первоначально запрошенном URL-адресе. Я знаю два решения:

  • Некоторая работа с состояниями сеанса, позволяющая сохранить исходный URL как переменную, возможно, используя promises.

  • Добавьте исходный URL в качестве параметра запроса в запрос /login.

Проверьте этот ответ: Как найти исходный путь запроса до перенаправления Express 4