es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El disparo de la solicitud de búsqueda se realiza dos veces durante la carga de la página y una vez que la página haya finalizado de cargarse.

La siguiente es una página para confirmar tu dirección de correo electrónico, estoy usando fetch para enviar el parámetro de token único a la API, pero lo que sucede es que la solicitud de fetch en la función de carga se llama dos veces e incluso si no se muestra en la consola, el valor de la respuesta cambia.
Aquí hay una explicación paso a paso:
– haz clic en el enlace
– fetch envía una solicitud a la API con el token único
– la API responde con OK o Not Found (si ya has confirmado tu correo electrónico)

El tercer paso es lo que causa un problema, una vez que la página se carga, parece que se obtiene en segundo plano y muestra un mensaje de éxito hasta que finaliza la carga, luego el mensaje mostrado cambia a un error, cuando reviso la API puedo ver dos solicitudes, la primera es un éxito y la siguiente no se encuentra (no se encuentra porque se elimina el token después de validar al usuario).

<script context="module" lang="ts">
    import type { Load } from '@sveltejs/kit';
    import { variables } from '$lib/variables';

    const { api } = variables;

    export const load: Load = async ({ fetch, page }) => {
        const res = await fetch(api + '/Newsletters/subscribers/validation/' + page.params.token);

        if (res.status === 200 && res.statusText === 'OK') {
            return {
                props: {
                    showSpinner: false,
                    isErr: false
                }
            };
        }

        return {
            props: {
                showSpinner: false,
                isErr: true
            }
        };
    };
</script>

<script lang="ts">
    export let isErr: boolean = false;
    export let showSpinner: boolean = true;
</script>

<section>
    {#if showSpinner}
        <!-- spinner -->
    {:else if isErr}
        <!-- err -->
    {:else}
        <!-- ok -->
    {/if}
</section>

Aquí también se hacen referencia a otros problemas a los que esto podría estar relacionado:
__layout.svelte puede ejecutarse dos veces después de recargar el navegador en modo de desarrollo
El script del módulo Svelte se ejecuta varias veces

Estoy usando un parche agregando un botón para hacer clic y hacer fetch en lugar de hacerlo en la carga, pero no es el enfoque correcto para cómo funcionan este tipo de páginas.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la solicitud de búsqueda en la función de carga se llama dos veces y aunque la consola no lo muestra, el valor de la respuesta cambia. Esto causa un problema donde la página se carga y muestra un mensaje de éxito, pero luego cambia a un mensaje de error una vez que termina de cargarse.

    La solución proporcionada, que implica agregar un botón para activar manualmente la solicitud de búsqueda, es una solución temporal pero no el enfoque correcto para este tipo de página.

    Algunos problemas relacionados incluyen ‘__layout.svelte puede ejecutarse dos veces después de recargar el navegador en modo de desarrollo’ y ‘El script de módulo de Svelte se ejecuta varias veces’.

Comments are closed.