ExpressJS:重定向到客户端处理的URL

时间:2019-04-10 04:27:32

标签: javascript node.js reactjs express

我在后端使用ExpressJs,在前端使用ReactJS。服务器在localhost:3000上运行,客户端在localhost: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 个答案:

答案 0 :(得分:2)

从API成功响应后,您应该重定向用户。后端不能更好地处理它,因为您只有一个页面应用程序,从技术上讲它没有服务器可以识别的其他页面,这就是为什么当您尝试重定向到http://localhost:8080/chat时收到404错误的原因。它仅知道为您的捆绑包提供响应代码的index.html文件。之所以能够在地址栏中输入/chat是因为您的用户界面已设置为可以处理来自所使用路由器的请求。不是服务器将您引导到那里。

这应该很简单,这是一个示例:

logUserIn = async (userData) => {
  const isAuthed = await authenticateUser(userData)
  if (isAuthed) {
    this.props.history.push('/chat');
  } else {
    console.log('User not found!');
  }
}