使用Express和Javascript通过POST登录后重定向
我正在尝试构建我的第一个Node.js应用程序。现在我正在开发一个登录站点,它应该在成功登录后将用户重定向到/backend。然而,在控制台中,看起来一切正常,但浏览器什么也不做。 我在stackoverflow上找到了一些类似的帖子,但大多数人都在使用AJAX,我找不到任何适合我的东西 这是我的发帖方法。它首先对用户进行身份验证,如果成功,我希望被重定向:使用Express和Javascript通过POST登录后重定向,javascript,node.js,redirect,Javascript,Node.js,Redirect,我正在尝试构建我的第一个Node.js应用程序。现在我正在开发一个登录站点,它应该在成功登录后将用户重定向到/backend。然而,在控制台中,看起来一切正常,但浏览器什么也不做。 我在stackoverflow上找到了一些类似的帖子,但大多数人都在使用AJAX,我找不到任何适合我的东西 这是我的发帖方法。它首先对用户进行身份验证,如果成功,我希望被重定向: router.post('/login', (req, res) => { store .authentic
router.post('/login', (req, res) => {
store
.authenticate({
username: req.body.username,
password: req.body.password
})
.then(({ success }) => {
if (success) {
res.redirect('/backend')
}
else res.sendStatus(401)
})
});
以下是我对后端站点的获取方法:
router.get('/', function(req, res, next) {
res.render('backend/backend');
});
不确定是否需要,但以下是触发POST方法的eventlistener:
const Login = document.querySelector('.Login')
Login.addEventListener('submit', (e) => {
e.preventDefault()
const username = Login.querySelector('.username').value
const password = Login.querySelector('.password').value
post('/login/login', { username, password })
.then(({ status }) => {
if (status === 200) alert('login success')
else alert('login failed')
})
})
我的控制台显示如下内容:
验证用户用户名
发布/登录/登录302
获取/后端304
然而,我的浏览器没有显示/backend,尽管显然正在调用GET方法。
谢谢你的帮助 我不知道
post
函数和选项是什么,但是如果您将其替换为fetch
函数,那么您可以将重定向:“follow”
属性设置为在服务器命令时重定向
const Login = document.querySelector('.Login')
Login.addEventListener('submit', (e) => {
e.preventDefault()
const username = Login.querySelector('.username').value
const password = Login.querySelector('.password').value
fetch('/login/login', {
method: 'POST',
body: JSON.stringify({ username, password }),
redirect: 'follow'
}).then(({ status }) => {
if (status !== 200) alert('login failed')
})
})
或者,您可以从服务器发送要重定向到的URL,并从客户端手动重定向到页面
// Instead of res.redirect(), use send to send the URL back to the client.
res.send('/backend');
post
函数是一个库还是围绕fetch
调用自制的包装器?我希望我正确地理解了你的意思,我对节点和服务器的东西还很陌生。我没有自制包装器,我认为post函数是由express提供的。没关系:)。Express.js位于服务器上。我指的是事件侦听器中向服务器发出请求的函数。感谢您的帮助!第一个建议对我不起作用,但第二个解决了问题!
const Login = document.querySelector('.Login')
Login.addEventListener('submit', (e) => {
e.preventDefault()
const username = Login.querySelector('.username').value
const password = Login.querySelector('.password').value
post('/login/login', { username, password })
.then((response) => {
if (response.status === 200) {
alert('login success');
return response.text();
}
else alert('login failed')
})
.then((url) => {
location.replace(location.origin + url);
});
})