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.

Rutas anidadas en la generación de páginas estáticas en Svelte

Estoy creando rutas de nombres de archivo anidadas como se muestra en la imagen a continuación:

enter image description here

Estas URL funcionan como se espera:

/localhost/list/2020/prod/furn
/localhost/list/2020/prod/deco
/localhost/list/2021/prod/furn

Sin embargo, estas URL también funcionan, pero no deberían:

/localhost/list/blah/p/furn
/localhost/list/2020/xxx/deco
/localhost/list/furn

PD: Si se elimina “list” de las URL anteriores, no funcionan.

URLs de muestra pasadas desde svelte.config.js:

entries: ['/list/2020/prod/furn', '/list/2021/prod/deco']

Se agradece cualquier indicio de cómo lograr que esto funcione como se espera para la generación de sitios estáticos.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en los segmentos dinámicos de las rutas de las rutas de la ruta de acceso. En SvelteKit, los segmentos dinámicos se definen utilizando corchetes, como /:year/:category/:product.

    Para asegurarse de que las URL solo funcionen como se espera, puede agregar expresiones regulares a cada segmento dinámico para que coincida con patrones específicos. Por ejemplo, para el segmento de año, puede usar \d{4} para que coincida solo con enteros de cuatro dígitos. Para el segmento de categoría, puede usar prod|cons para que coincida solo con las palabras “prod” o “cons”.

    Aquí tienes un ejemplo de cómo puedes definir las rutas en el archivo routes.js de SvelteKit:

    import { Route } from "@sveltejs/kit";
    
    // Define regular expressions for dynamic segments
    const yearPattern = "\\d{4}";
    const categoryPattern = "prod|cons";
    const productPattern = "(furn|deco)";
    
    export const routes = [
      // Ruta estática
      Route({
        path: "/list",
        template: "List",
      }),
      // Ruta dinámica con expresiones regulares
      Route({
        path: `/list/:year(${yearPattern})/:category(${categoryPattern})/:product(${productPattern})`,
        template: "ProductList",
      }),
    ];
    

    Con esta configuración, solo las URL que coincidan con las expresiones regulares definidas para cada segmento dinámico funcionarán. Cualquier otra URL devolverá un error 404.

    Esto asegurará que tus rutas de acceso de ruta anidadas funcionen como se espera y evitará que se acceda a cualquier URL inesperada.

Comments are closed.