How to render static files within Gin router?

15,920

Quoting the original gin docs: https://github.com/gin-gonic/gin#serving-static-files

func main() {
    router := gin.Default()
    router.Static("/assets", "./assets")
    router.StaticFS("/more_static", http.Dir("my_file_system"))
    router.StaticFile("/favicon.ico", "./resources/favicon.ico")

    // Listen and serve on 0.0.0.0:8080
    router.Run(":8080")
}

So basically you should define a route specific to your JSON file next to other routes you've defined. And then use that.

Share:
15,920

Related videos on Youtube

02040402
Author by

02040402

Updated on June 04, 2022

Comments

  • 02040402
    02040402 almost 2 years

    I want to serve a JSON file with gin server. And set some customize values in the HTML file. Use JavaScript in it to call the JSON file.

    My application structure:

    .
    ├── main.go
    └── templates
        ├── index.html
        └── web.json
    

    I put these basic source into main.go file:

    package main
    
    import (
        "net/http"
    
        "github.com/gin-gonic/gin"
    )
    
    var router *gin.Engine
    
    func main() {
        router = gin.Default()
        router.LoadHTMLGlob("templates/*")
    
        router.GET("/web", func(c *gin.Context) {
            c.HTML(
                http.StatusOK,
                "index.html",
                gin.H{
                    "title": "Web",
                    "url":   "./web.json",
                },
            )
        })
    
        router.Run()
    }
    

    Some code in templates/index.html file:

    <!doctype html>
    <html>
    
      <head>
        <title>{{ .title }}</title>
    
        // ...
      </head>
    
      <body>
        <div id="swagger-ui"></div>
    
        // ...
        
        <script>
          window.onload = function() {
            // Begin Swagger UI call region
            const ui = SwaggerUIBundle({
              url: "{{ .url }}",
              dom_id: '#swagger-ui',
              // ...
            })
            // End Swagger UI call region
    
            window.ui = ui
          }
        </script>
    
      </body>
    </html>
    

    When running the application, I got a fetch error:

    Not Found ./web.json

    So how should I serve the web.json file to be accessed in the Gin internal server?

  • 02040402
    02040402 over 4 years
    It's the simple way. But how can I set dynamic url param here?
  • Seaskyways
    Seaskyways over 4 years
    @02040402 yes that's how you do it, perhaps have a GET param, and do the file grabbing manually