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.
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: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:
Con estos cambios, los archivos estáticos deberían cargarse correctamente y los errores 404 deberían resolverse.