使用地址栏在单页应用程序中路由用户

Posted

技术标签:

【中文标题】使用地址栏在单页应用程序中路由用户【英文标题】:Routing an user in a single page application using the adress bar 【发布时间】:2018-02-08 15:10:15 【问题描述】:

我有一个后端使用 express 来提供静态目录,路径为/,其中包含一个单页前端。此后端还提供 API REST。

前端内置在 React 中,并使用 react-router 从 Web 应用程序的不同视图中路由用户。

如果我的 react-router 有两个条目,比如说 /app/config

如果用户直接在 Web 浏览器的地址栏中输入 URL,我如何将客户端重定向到该应用程序视图?

现在,如果我这样做,Express 会收到请求并显然返回 404 消息,因为单个页面将提供给 / 路径。

【问题讨论】:

【参考方案1】:

解决此问题的一种简单方法是始终(即使在 404 上)在您的快速路由处理程序中向用户发送 index.html

见:https://***.com/a/25499007/2624575

但是,你需要注意一些事情:

1) 你的 React Router 代码应该开始处理 404:https://***.com/a/37491381/2624575

2) 您需要正确处理资产的路径(图标、css、js 等),否则您将向这些资源发送相同的index.html(这会使您的页面呈现不正确)

3) 确保react-router 使用browserHistory(不使用哈希的历史#),这样React 将能够正确渲染您的路由

希望对你有帮助!

【讨论】:

所以,澄清一下:我是否必须摆脱快速静态服务,并在前端检查请求的路径? @lilezek 您仍然需要使用 express 静态服务(因为您的所有资产都需要通过 express 服务)。您只需要添加一条规则以始终提供index.html,即使在 404 上也是如此。您现在的问题是 express 将“/app”和“/config”视为 404,但您需要 index.html。你明白吗? 是的,我理解那部分,但是,在给出index.html 之后,react-router 是否会从地址栏将用户路由到应用程序视图?我必须在前端做一些额外的事情吗? 当然!一旦它加载了您的 javascriptReact Router 将查看您的 url(在这种情况下,/app/config)并检查您的路由是否与给定的 url 匹配。如果匹配,它将呈现您的路线。只要确保您使用的是browserHistory(更新了我的答案)。

以上是关于使用地址栏在单页应用程序中路由用户的主要内容,如果未能解决你的问题,请参考以下文章

Vue - 路由

如何在单页移动 Web 应用程序中实现我自己的历史堆栈?

前端路由的原理

前置路由

在单页 Clojure Web 应用程序中使用 Friend 进行身份验证和授权

授权代码流如何在单页应用程序中工作?