Избегайте использования jQuery, это почти всегда приведет к плохим практикам и не поддерживаемому коду.
Вам следует использовать простой Javascript или React, если вам нужна инфраструктура (в основном, если вам нужно работать над большим проектом), но может не подходить для начинающих JS).Мое решение здесь в простом Javascript.
В качестве замены утилиты запроса jQuery ($.post()
и т. Д.), Браузеры имеют очень хороший API-интерфейс HTTP-запроса с именем fetch (MDN) .Я использую его в этом решении.
Если вы не хотите показывать параметр email
в URL, вы можете установить его в localStorage
.
Вы не можете перенаправить напрямуюот Экспресс для POST
метода.Только если вы пытаетесь GET
страницы, Express может перенаправить на другой GET
(и, таким образом, изменить URL в вашем браузере).
Единственное решение, которое вам нужно - это использовать window.location
после получения ответа от вашей /signup
конечной точки.
на стороне сервера:
router.post('/', function (req, res) {
const form = req.body.form
// your registration code here
// ...
res.json({
success: true,
email: form.email
})
})
на стороне клиента: signup.js
const form = {
email: document.getElementById('email').value
// add other fields you need
}
fetch('/signup', {
method: 'POST',
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify({ form })
})
.then(res => res.json())
.then(res => {
// Set the localStorage item so you can get it back
// in the JS script of /signup/confirm-email
localStorage.setItem('email', res.email)
// Redirect to the confirm email page
window.location = '/signup/confirm-email'
})
на стороне клиента:confirmEmail.js
const email = localStorage.getItem('email')
if (!email) window.location = '/signup'
// proceed with your code
Код этого ответа