具有单页应用程序的真实 URL?

Posted

技术标签:

【中文标题】具有单页应用程序的真实 URL?【英文标题】:Real URLS with Single Page Applications? 【发布时间】:2016-10-09 17:24:28 【问题描述】:

我在我的一个项目中使用了 react 路由器,所以 react 是前端库,路由由 react 路由器管理,后端视图在 django 中,而 apis 在 django rest 中

所以我在浏览 react-router 文档时遇到了这个:-

配置您的服务器 您的服务器必须准备好处理真实的 URL。当应用程序第一次在 / 加载时,它可能会工作,但是当用户四处导航然后在 /accounts/23 处点击刷新时,您的 Web 服务器将收到对 /accounts/23 的请求。您将需要它来处理该 URL 并将您的 javascript 应用程序包含在响应中。**

我想知道这将如何与 django 视图一起使用。

【问题讨论】:

您好,这是一个相当主观的答案(这就是我添加评论而不是答案的原因)但是我相信除非您愿意硬着头皮创建一个完整的单页应用程序。由于您在 django 中有您提到的后端视图,因此我建议您仅对客户端路由使用散列路由。我在关于 redux 的帖子中写了一个相当广泛的意见:spapas.github.io/2016/03/02/react-redux-tutorial/#store-js(查看我对 HashHistory 与 BrowserHistory 的评论) 【参考方案1】:

在开发服务器上,您只需为不以api/static/ 开头的所有内容设置路由,即可返回基本的app.html 文件。示例

class AppHTMLView(View):

    def get(self, request):
        fn = os.path.join(settings.BASE_DIR, "app", "app.html")
        with open(fn, 'r') as fh:
            return HttpResponse(fh.read())

在您的生产服务器上,您相应地配置 nginx。像这样的

...
location / 
    root /var/www/example.com/static_files/;
    try_files '' /app.html =404;

但这并不是 React 特有的,而是所有单页应用程序所共有的。

【讨论】:

是的,所有单页应用程序都应该通用,我将编辑问题标题,nginx 是我觉得最好的解决方案

以上是关于具有单页应用程序的真实 URL?的主要内容,如果未能解决你的问题,请参考以下文章

检测 iframe 内 SPA(单页应用程序)的 URL 更改

单页应用程序路由

在具有不同主页的单页应用程序中路由

具有 REST API 架构的单页应用程序

前端单页应用以及状态保持的探索

具有基于 HttpOnly cookie 的身份验证和会话管理的单页应用程序