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.

Los archivos estáticos no se están sirviendo con la agrupación de rutas de Gin.

Estoy intentando servir archivos CSS y JS, pero no se cargan y da un error de estado 404 para cada archivo estático excepto para los HTML. Aquí está el código:

func main() {
    router := gin.Default()
    router.LoadHTMLGlob("templates/*.html")

    router.Use(static.Serve("/", static.LocalFile("./web", true)))

    // Grupo simple: v1
    v1 := router.Group("/v1")
    {
        // v1.Use(static.Serve("/", static.LocalFile("./web", true))) esto no hizo que funcione tampoco

        v1.GET("/login", getlogin)
        v1.POST("/checkAuthLog", postRegis)
    }

    // Grupo simple: v2
    v2 := router.Group("/v2")
    {
        v2.GET("/login", getlogin)
        v2.POST("/checkAuthLog", postRegis)
    }

    router.Run(":8080")
}

Normalmente, sin enrutamiento de grupo, funciona bien. Pero de esta manera, no funcionó sin importar cuánto lo intentara.

Cuando reviso el código fuente del HTML a través del navegador, enlaza a:

http://localhost:8080/v1/css/style.css

Aunque debería ser http://localhost:8080/css/style.css. De alguna manera está buscando en la ruta v1 para el archivo CSS. Además, en el archivo HTML enlaza así:

<link rel="stylesheet" type="text/css" href="css/style.css">

No puedo encontrar dónde está el error.

Por cierto, la estructura del proyecto es la siguiente:

-main.go
-templates
----index.html
----login.html
-web
----css
----fonts
----js
----img

Como mencioné, normalmente funciona cuando simplemente escribo /login, pero las cosas se complican cuando comienza con la ruta v1/login.

Por último, aquí está el registro del framework GIN:

[GIN] 2021/12/08 – 18:13:50 | 200 | 6.7847ms | ::1 | GET “/v1/login”

[GIN] 2021/12/08 – 18:13:50 | 404 | 0s | ::1 | GET “/v1/css/bootstrap.min.css”

[GIN] 2021/12/08 – 18:13:50 | 404 | 0s | ::1 | GET “/v1/css/style.css”

[GIN] 2021/12/08 – 18:13:50 | 404 | 0s | ::1 | GET “/v1/js/script.js”

[GIN] 2021/12/08 – 18:13:50 | 404 | 0s | ::1 | GET “/v1/js/bootstrap.min.js”

[GIN] 2021/12/08 – 18:13:50 | 404 | 0s | ::1 | GET “/v1/js/script.js”

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basado en el registro y el fragmento de código proporcionado, el problema es que los archivos estáticos (archivos CSS y JS) se están serviendo con el prefijo /v1/, lo cual está causando el error 404 al intentar acceder a ellos.

    Para solucionar el problema, debes modificar el middleware static.Serve para el enrutamiento de grupos, especificando el prefijo correcto para los archivos estáticos. Así es como puedes modificar el código:

    func main() {
        router := gin.Default()
        router.LoadHTMLGlob("templates/*.html")
    
        // Servir archivos estáticos con prefijo "/static/"
        router.Use(static.Serve("/static", static.LocalFile("./web", true)))
    
        // Grupo simple: v1
        v1 := router.Group("/v1")
        {
            // Servir archivos estáticos con prefijo "/static/" para este grupo
            v1.Use(static.Serve("/static", static.LocalFile("./web", true)))
    
            v1.GET("/login", getlogin)
            v1.POST("/checkAuthLog", postRegis)
        }
    
        // Grupo simple: v2
        v2 := router.Group("/v2")
        {
            // Servir archivos estáticos con prefijo "/static/" para este grupo
            v2.Use(static.Serve("/static", static.LocalFile("./web", true)))
    
            v2.GET("/login", getlogin)
            v2.POST("/checkAuthLog", postRegis)
        }
    
        router.Run(":8080")
    }
    

    En el código modificado, los archivos estáticos se sirven con el prefijo /static en lugar de la ruta raíz, y este middleware se agrega a los grupos v1 y v2 con su propio prefijo.

    Además, asegúrate de cambiar el código HTML para hacer referencia a los archivos estáticos con el nuevo prefijo:

    <link rel="stylesheet" type="text/css" href="/static/css/style.css">
    

    Con estos cambios, los archivos estáticos deberían cargarse correctamente y los errores 404 deberían resolverse.

Comments are closed.