使用Sapper,如何在出现404错误时重定向到索引页?

时间:2019-10-22 01:18:29

标签: javascript svelte sapper

出现404错误时,我不想显示404页面。相反,如果用户已登录,我想重定向回索引页面,如果用户已注销,则想重定向到登录页面。如果未登录,我已经能够将用户从索引页面路由到登录页面,因此我可能只需要重定向到索引页面,并负责重新路由到登录页面,尽管那样似乎必须执行两次重新路由效率很低。

我可以通过将routes/_error.svelte页面重写为此内容来实现它。

<script>
    import { onMount } from 'svelte';
    onMount(() => {window.location.href = '/'});
</script>

但是我不太确定这是完成我想做的最好的方法。它还会针对所有错误进行重定向,在以后的项目中,我可能希望显示某些错误(例如404),但重定向其他错误(例如500)。

有人对使用Sapper可以更好地实现这一目标有一些见识吗?

2 个答案:

答案 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>