使用Express和Javascript通过POST登录后重定向

使用Express和Javascript通过POST登录后重定向,javascript,node.js,redirect,Javascript,Node.js,Redirect,我正在尝试构建我的第一个Node.js应用程序。现在我正在开发一个登录站点,它应该在成功登录后将用户重定向到/backend。然而,在控制台中,看起来一切正常,但浏览器什么也不做。 我在stackoverflow上找到了一些类似的帖子,但大多数人都在使用AJAX,我找不到任何适合我的东西 这是我的发帖方法。它首先对用户进行身份验证,如果成功,我希望被重定向: router.post('/login', (req, res) => { store .authentic

我正在尝试构建我的第一个Node.js应用程序。现在我正在开发一个登录站点,它应该在成功登录后将用户重定向到/backend。然而,在控制台中,看起来一切正常,但浏览器什么也不做。 我在stackoverflow上找到了一些类似的帖子,但大多数人都在使用AJAX,我找不到任何适合我的东西

这是我的发帖方法。它首先对用户进行身份验证,如果成功,我希望被重定向:

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);
    });
})