10

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

我可以通过将routes/_error.svelte页面重写到这个来完成它......

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

但我不太相信这是完成我想做的事情的最佳方式。它还重定向所有错误,在未来的项目中,我可能希望显示某些错误,例如 404,但重定向其他错误,例如 500。

有没有人对如何使用 Sapper 更好地实现这一点有一些见解?

4

2 回答 2

6

你应该试试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 问题在这里

于 2019-12-04T02:27:11.843 回答
0

您还可以使用 HTML 元标记进行重定向。像这样使用它routes/_error.svelte

<svelte:head>
    <meta http-equiv="refresh" content="0; URL=./index" />
</svelte:head>
于 2021-03-26T12:38:33.033 回答