【发布时间】:2016-01-16 16:13:25
【问题描述】:
我正在开发一个具有客户端路由器的单页应用程序。因此,尽管运行应用程序的基本 url 将是 http:://example.com 或 http:://example.com/index.html - 跳过路由 '/' 和 '/index.html 的域名'
但是在我的应用程序的某个地方,由于我的客户端路由器,我可能会调用类似 '/appointments/20160113 的路由,并且客户端路由器会将我重定向到我的 SPA 中的适当“约会页面”,并传递参数今天的日期。
但是如果用户直接调用http://example.com/appointments/20160113,我被引导相信服务器应该直接响应/index.html,这样浏览器就不会得到404。
我正在使用 nodejs 构建服务器(特别是 http2 模块,但我认为这不是很重要,而且我的示例不使用 https,尽管它们使用 http2)。我只是尝试更改服务器,因此如果它遇到未知 url,它会使用 index.html 文件进行响应。
然而,浏览器将此视为它的第一个响应,然后请求其相对于 url 的其余附加文件(因此例如跟进 /appointments/20160113/styles/main .css)。这会导致无限循环,因为服务器会以 index.html 中的另一个副本进行响应(并立即返回对 /appointments/20160113/styles/styles/main.css 的请求)。
在页面的生命周期中运行 javascript(尤其是路由器软件)还为时过早,因此显然这种方法过于简单。
我还编写了客户端路由器(使用历史 API),因此我可以根据需要进行更改。
应该如何处理这种情况。我在想可能是 301 重定向到 /index.html 或其他东西,然后路由器的初始调度知道这一点并且可以执行 popstate 或其他东西。理想情况下,我希望支持通过外部方式在用户之间传递 url,但在我真正尝试实现它之前,我还没有意识到其中的含义。
【问题讨论】:
标签: node.js http single-page-application