Angular HTML5 URL - 服务器配置

qum*_*uma 4 spring angularjs spring-boot

我读过 AngularJS 使用 hashbang URL 作为默认值 - 但这不是一个优势,因此应该使用 HTML5 URL。为了在客户端配置此行为,必须完成以下操作:

...
$locationProvider.html5Mode(true);
...
Run Code Online (Sandbox Code Playgroud)

在服务器端还必须完成一些配置 - 据我了解应该配置 URL 请求,因此应该将包含 ng-app 的页面(起始页面 - 例如index.html)传递给客户端。不包括提供静态资源(CSS、图像、AngularJS 部分等)的 URL 和用于 CRUD 的 URL(例如 RESTful 服务 URL)。

我的问题不是如何在服务器端调整这种行为(例如,对于内部有嵌入式服务器的字符串启动)?

另一个问题是,您是否在 AngularJS 应用程序中区分静态资源(例如 .../static/..)和 CRUD URL(例如 .../database/...)?

多谢!

小智 5

在 Spring Boot 中,您可以像这样配置一个包罗万象的视图控制器:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.setOrder(Ordered.LOWEST_PRECEDENCE);
        registry.addViewController("/**").setViewName("forward:/index.html");
    }
}
Run Code Online (Sandbox Code Playgroud)

这会将所有未处理的请求转发到index.html。 setOrder(Ordered.LOWEST_PRECEDENCE)用于确保这种包罗万象的转发仅在没有找到其他路由后才适用。

但是,现在所有资源查找也都通过此视图控制器进行路由(因为 WebMvcAutoConfiguration 在应用默认资源处理程序之前检查路径模式是否存在)。

一种可能的修复方法是将静态路径模式设置为application.properties包含对文件扩展名的检查:

spring.mvc.static-path-pattern = /**.*
Run Code Online (Sandbox Code Playgroud)

仅当您的角度路线不包含任何扩展时,这才有效。另一种方法是完全禁用 spring boot 的资源处理(spring.resources.addMappings = false)并替换为您自己的。