在某种程度上基于这个指南:
我创建了一个多模块的Maven项目,其中一个子模块是我的后端,另一个子模块是我的前端。当我构建整个项目时,首先构建前端,然后将其dist/
资源复制到后端,然后构建后端,最终可以通过java -jar target/backend-1.0.0-SNAPSHOT
启动我的Spring Boot后端,并在localhost:8080
上访问它。
根据我在后端实现的控制器,这是有道理的:
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
@RequestMapping("/")
public Greeting root(@RequestParam(value = "name", defaultValue = "Root!") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
如果我访问:
http://localhost:8080/index.html
,我会进入我的前端界面:
目前有以下两个路由:
router.js
Vue.use(Router);
const router = new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/',
name: 'home',
component: HomeRoute
},
{
path: '/myroute',
name: 'myroute',
component: MyRoute
}
]
});
export default router;
在例如App.vue中,我有:
<template>
<div class="hello">
<li>
<router-link to="/MyRoute">GoToMyRoute</router-link>
</li>
<li>
<router-link to="/">GoToHome</router-link>
</li>
<router-view></router-view>
</div>
</template>
我也可以访问,例如:
到目前为止都很顺利。但是如果我尝试直接在浏览器中输入:http://localhost:8080/MyRoute
,我会得到以下结果:
我猜测这是因为我的控制器缺少一个后端@RequestMapping
来处理/MyRoute
。
基于以上信息,我的问题如下:
- 如果我想直接在浏览器中访问每个vuejs路由,是否需要为每个路由维护一个后端RequestMapping?
- 我该如何分离/排序前端和后端的端点?目前似乎没有约定俗成的规则来区分后端端点与纯前端端点/路由。
Vue
不是很熟悉,但我认为在第一种情况下,它使用 URL 重写而不是实际请求MyRout
端点。但是,如果您尝试直接将此 URL 放入浏览器中,则会出现错误。不确定哪种方式最适合解决这个问题。我认为所有组件名称都应路由到index.html
。 - Alexey Usharovski