我一直在使用Vue 3,TypeScript和电影数据库(TMDB)API进行SPA。
我正在处理404页面。
在src\router\index.ts
中,我有:
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import HomeView from '../views/HomeView.vue';
import TopRatedMoviesView from '../views/TopRatedMoviesView.vue';
import MovieDetailsView from '../views/MovieDetailsView.vue';
import ActorDetailsView from '../views/ActorDetailsView.vue';
import NotFoundView from '../views/NotFoundView.vue';
const routes: Array<RouteRecordRaw> = [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/top-rated',
name: 'top_rated',
component: TopRatedMoviesView
},
{
path: '/movie/:id',
name: 'movie_details',
component: MovieDetailsView
},
{
path: '/actor/:id',
name: 'actor_details',
component: ActorDetailsView
},
{
path: '/:pathMatch(.*)*',
name: "404",
component: NotFoundView
},
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router
字符串
在src\views\NotFoundView.vue
中,我有:
<template>
<div class="container d-flex">
<div class="text-center">
<h1 class="mb-3">404 | page not found</h1>
<router-link class="btn btn-sm btn-success" to="/">
<strong>Go to the Homepege</strong>
</router-link>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
name: 'NotFoundView',
});
</script>
型
当根URL http://localhost:8080/someNonExistingPath
后面有一个随机字符串时,会显示404视图(如预期的那样)。
但是,当为动态路由http://localhost:8080/movie/a615656
提供“坏”参数时,不会发生同样的情况。
我做错了什么?解决此问题最可靠的方法是什么?
1条答案
按热度按时间kgqe7b3p1#
可能的原因是当您访问
/movie/a615656
URL时,它仍然满足路由参数/movie/:id
。因为有时,id
也可以包含非数字字符。要解决这个问题,您可以使用路由REGEX来过滤掉非数字值,或者手动抛出404视图。
例如,在
getMovieDetails
方法中,您可以查找非字母数字字符并抛出404
视图。但这会导致不一致性,因为即使id
满足,具有id
的项也可能在服务器端不可用,因此您最好的选择是在catch
方法中抛出404
,例如:字符串
这可能会导致一个小的延迟,因为你必须等待服务器的响应,但这是你应该做的。即使在Nuxt指南中,他们提供了以下示例代码:
型
这只是一个例子,如果你不熟悉NuxtJS,