出现404错误时,我不想显示404页面。相反,如果用户已登录,我想重定向回索引页面,如果用户已注销,则想重定向到登录页面。如果未登录,我已经能够将用户从索引页面路由到登录页面,因此我可能只需要重定向到索引页面,并负责重新路由到登录页面,尽管那样似乎必须执行两次重新路由效率很低。
我可以通过将routes/_error.svelte
页面重写为此内容来实现它。
<script>
import { onMount } from 'svelte';
onMount(() => {window.location.href = '/'});
</script>
但是我不太确定这是完成我想做的最好的方法。它还会针对所有错误进行重定向,在以后的项目中,我可能希望显示某些错误(例如404),但重定向其他错误(例如500)。
有人对使用Sapper可以更好地实现这一目标有一些见识吗?
答案 0 :(得分:1)
您应该尝试使用goto
函数。
import { goto } from '@sapper/app';
goto('your/path');
,如果要在onMount挂钩中执行此操作,则应为:
<script>
import { onMount } from 'svelte';
import { goto } from '@sapper/app';
onMount(() => goto('your/path'));
</script>
在非常特殊的情况下,如果要根据_error.svelte
页上的错误条件进行操作,则应根据错误选择路径:
<script>
import { onMount } from 'svelte';
import { goto } from '@sapper/app';
onMount(() => goto(
error.status === 500
? 'path1'
: error.status === 404
? 'path2'
: 'path3'
));
</script>
原始GitHub问题here
答案 1 :(得分:0)
您还可以使用 HTML 元标记进行重定向。像这样在 routes/_error.svelte
上使用它:
<svelte:head>
<meta http-equiv="refresh" content="0; URL=./index" />
</svelte:head>