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

Ste*_*ell 10 javascript svelte sapper

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

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

<script>
    import { onMount } from 'svelte';
    onMount(() => {window.location.href = '/'});
</script>
Run Code Online (Sandbox Code Playgroud)

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

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

Rod*_*ina 6

你应该试试goto函数。

import { goto } from '@sapper/app';
goto('your/path');
Run Code Online (Sandbox Code Playgroud)

如果您想在 onMount 挂钩中执行此操作,则应该是:

<script>
    import { onMount } from 'svelte';
    import { goto } from '@sapper/app';
    onMount(() => goto('your/path'));
</script>
Run Code Online (Sandbox Code Playgroud)

在您非常具体的情况下,如果您想根据_error.svelte页面上的错误标准执行此操作,则应根据错误选择路径:

<script>
    import { onMount } from 'svelte';
    import { goto } from '@sapper/app';
    onMount(() => goto(
      error.status === 500
        ? 'path1'
        : error.status === 404
        ? 'path2'
        : 'path3'
    ));
</script>
Run Code Online (Sandbox Code Playgroud)

原始 GitHub 问题在这里

  • 您是否在“preload”中尝试过 https://sapper.svelte.dev/docs#Context `this.redirect(statusCode, location)` ? (2认同)