如何解决使用React Router时的Spring Boot和React文件映射
我有带有React Router的Spring Boot 2.3.1和React.js 16.3.1,我想通过Spring Boot服务React单页应用程序。
一切正常,直到路由器更改了路径,然后刷新了页面。然后,映射会正确返回index.html文件,但不会加载其他文件(.js,.css等)。问题是它使用错误的URL查找它们。例如,当我在路径http://localhost:8080/a/b/c
中时,它将尝试从以下路径加载其他文件:http://localhost:8080/a/b/static/css/main.a907b239.chunk.css
或http://localhost:8080/a/b/favicon.ico
,因此'/ a / b'是问题所在。在node.js服务器上运行应用程序时,效果很好。
这是我的文件结构,所有的反应文件都在 static 文件夹中:File structure
这是我的控制器,用于将所有请求转发到“ /”路径,因此始终返回index.html:
@Controller
public class ForwardingController {
@RequestMapping("/**/{path:[^\\.]+}")
public String forward() {
return "forward:/";
}
}
有什么方法可以使应用使用正确的网址查找文件或转发所有这些请求?
我已经尝试过(https://stackoverflow.com/a/47704160):
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/{spring:\\w+}")
.setViewName("forward:/");
registry.addViewController("/**/{spring:\\w+}")
.setViewName("forward:/");
registry.addViewController("/{spring:\\w+}/**{spring:?!(\\.js|\\.css)$}")
.setViewName("forward:/");
}
}
但是它与我的控制器基本相同,不能解决问题
解决方法
我能够通过将"homepage": "/"
添加到 package.json 文件来解决该问题。显然,默认值是“ ./”,它说明了为什么使用错误的路径查找文件。事实证明,此参数未应用于开发构建(npm run start)。这就是为什么它可以在Node.js服务器上工作的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。