web-dev-qa-db-fra.com

Utilisation de SAPPER, comment puis-je rediriger vers la page d'index sur une erreur 404?

Sur une erreur 404, je ne veux pas afficher une page 404. Au lieu de cela, j'aimerais rediriger vers la page d'index si l'utilisateur est connecté ou à la page de connexion si l'utilisateur est déconnecté. Je suis déjà capable d'acheminer l'utilisateur vers la page de connexion dans la page de la page d'index si non connecté, alors j'ai peut-être juste besoin de rediriger vers la page d'index et de faire prendre soin de la remorque à la page de connexion dans la page. semble inefficace de devoir faire deux retintes.

Je suis capable de l'accomplir en réécrivant le routes/_error.svelte page à ceci ...

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

Mais je ne suis pas très confiant que c'est la meilleure façon d'accomplir ce que je veux faire. Il redirige également pour toutes les erreurs et dans un futur projet, je souhaite peut-être montrer certaines erreurs telles que 404, mais redirier sur d'autres erreurs comme 500.

Quelqu'un a-t-il une idée de la manière dont cela pourrait être mieux accompli à l'aide de SAPPER?

7
Steven Bell

Vous devriez essayer goto fonction.

import { goto } from '@sapper/app';
goto('your/path');

et si vous voulez le faire dans le crochet Onmount, il devrait être:

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

Dans votre cas très spécifique, si vous voulez le faire sur un critère d'erreur sur le _error.svelte Page, vous devez choisir votre chemin en fonction de l'erreur:

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

numéro GitHub d'origine ici

1
Rodrigo Medina