[英]Guaranteed HTML information if single-page web application (SPA) is not accessed at the root
假设我有一个完全单页的应用程序,该应用程序仅在根目录下提供HTML:
因此,使用node.js Express服务器时,可能类似于:
app.get('/',function(req,res,next){
res.render('index',{});
});
我的问题是,如果最终用户拥有完全干净的缓存,并且访问了应用程序的根目录,则服务器将发送html文件(标题为“ index.html”),一切正常。 但是,如果用户拥有完全干净的缓存并击中了除根路由以外的任何内容,那么用户的Web浏览器如何知道DOM的外观? 换句话说,作为单页面应用程序设计者,我如何确保该索引html页面从头到尾在前端的整个生命周期中代表应用程序的布局?
根据一些评论进行编辑
您所指的概念称为UI路由 ,这是单页面应用程序中常见的范例。 (Google Backbone UI路由器,AngularJS UI路由器等。您将看到很多预先构建的示例,这些示例将使您了解如何实现自己的示例。)
从概念上讲,您将在前端使用路由器,对于每条路由,它仅发送一个针对index.html
的GET请求(首次访问该页面)。 然后,路由器解析路由(例如/some-view
),并基于该路由显示或隐藏index.html
页面的特定部分。 这不是一件简单的事情,这就是为什么人们为此构建框架的原因,但是您绝对可以自己实现。
换句话说,无论何时用户访问路由www.yourwebsite.com/some-view
,它都不会发送任何其他文件的GET请求...无论如何,您始终会发送根/
的GET请求(但仅如果用户从一开始就进入/some-view
,则仍会加载index.html
,但前端的路由器会解析该路由,逻辑只会显示或隐藏一个页面的一部分。)
更多详情
您有两种选择:
ngRoute
,只要路由更改,它只会显示index.html
页面的不同视图 ,但从不向服务器发送请求 。 ) 在这种情况下,您实际上想在后端执行以下操作:
app.get('*',function(req,res,next){
res.render('index',{});
});
因为用户可以按照他们想要的UI路由进入您的应用程序,但是仍然需要每次都加载index.html
页面(只是在前端使用不同的视图)。
当然,您将需要不同的路由来提供静态内容等,但这仅是示例。
旁注 :如果使用ngRoute
,我认为您不需要使用*
进行全部路由。 我想我们将用以下所有警告:“这取决于您使用的路由框架”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.