如果未在根目录访问单页 Web 应用程序 (SPA),则保证 HTML 信息
Guaranteed HTML information if single-page web application (SPA) is not accessed at the root
>假设我有一个完全单页的应用程序,它提供 HTML 但只在根目录:
因此,对于节点.js Express服务器,它可能看起来像:
app.get('/',function(req,res,next){
res.render('index',{});
});
我的问题是,如果最终用户有一个完全干净的缓存并且他点击了应用程序的根目录,服务器将发送HTML文件(标题为"index.html"),一切都很好。但是,如果用户有一个完全干净的缓存并且点击除根路由以外的任何内容,那么用户的 Web 浏览器如何知道 DOM 应该是什么样子?换句话说,作为单页应用程序设计人员,如何确保此索引 html 页面从头到尾在前端上表示应用程序的整个生命周期的布局?
根据一些注释进行编辑
您所指的概念称为 UI 路由,这是单页应用程序中非常常见的范例。(Google Backbone UI router、AngularJS UI router等)您将看到大量预先构建的示例,这些示例将使您了解如何实现自己的示例。
从概念上讲,您将在前端使用路由器,对于每个路由,它只需发送一个 GET 请求index.html
(在您第一次访问页面时)。然后,路由器解析路由(例如,/some-view
),并根据该路由显示或隐藏index.html
页面的特定部分。这不是一件微不足道的事情,这就是为什么人们为它构建框架,但你绝对可以自己实现它。
换句话说,每当用户访问路由www.yourwebsite.com/some-view
时,它永远不会为任何其他文件发送GET请求...无论如何,您始终为根/
发送 GET 请求(但仅在第一次加载页面时发送。如果用户从一开始就转到/some-view
,index.html
仍会加载,但前端的路由器会解析该路由,并且逻辑只会显示或隐藏页面的一部分。
更多详情
您有以下几种选择:
- 您需要在后端为所有可能的路由创建路由(这不是单页应用)
- 您需要在前端处理 UI 路由(例如,在 AngularJS 中,您可以使用
ngRoute
,每当路由更改时,它只会显示index.html
页面的不同视图,但它从不向服务器发送请求。
在这种情况下,您实际上希望在后端执行类似操作:
app.get('*',function(req,res,next){
res.render('index',{});
});
因为用户可以以他们想要的任何 UI 路由进入您的应用程序,但它仍然需要每次加载index.html
页面(只是在前端使用不同的视图)。
当然,您需要不同的路由来提供静态内容等,但这只是一个示例。
旁注:如果使用ngRoute
,我认为您不需要用*
进行一条包罗万象的路线。我想我们会警告所有这些:"这取决于你使用的路由框架"。
- 获取html表单信息并使用ajax将其推送到PHP
- 设置 HTML 自定义属性与在 ID 属性中存储信息
- 隐藏我的管理员登录信息 HTML
- 采用HTML表单,将信息传递给Python脚本
- 如何在HTML中创建一个信息框,显示与悬停SVG路径相关的信息
- 向HTML页面添加按钮,更新表格信息
- 如何使用html/html5中的用户输入获取完整的地理位置详细信息
- PHP: header() 函数不重定向.使用 HTML 或 JavaScript 重定向时,会话信息会丢失
- 将信息框作为HTML标签属性(AngularJS)添加到Google Maps Marker
- 如何从 URL HTML 源代码中获取特定信息
- 用于从许多带有“for”循环的URL中获取HTML信息的X射线使对象未定义
- 如何将变量分配给链接中包含的信息?(Javascript/HTML)
- 在 HTML 表格中显示从 Firebase 数据库中检索到的信息
- 使用 HTML 中的提交按钮返回信息
- 获取邮件中的信息.php从函数.js解析为manage.html
- 创建可重复的 HTML 表单并从 JS 数组加载信息
- 如何在 HTML 中输入某些信息来自我的 json
- var.push 并在 HTML 页面中显示我的新临时信息
- 如何在web中检测用户操作系统/浏览器信息(使用php,js,html)
- Jquery 不从 html 表单中收集信息