+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 如何在 Gin 路由器中渲染静态文件? >

如何在 Gin 路由器中渲染静态文件?

时间:2024-04-06 14:53:28

今天小编给大家带来《如何在 Gin 路由器中渲染静态文件?》,以下内容主要包含等知识点,如果你正在学习或准备学习golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容
我想使用 gin 服务器提供 JSON 文件。并在 html 文件中设置一些自定义值。在其中使用 javascript 来调用 json 文件。

我的应用程序结构:

.
├── main.Go
└── templates
    ├── index.html
    └── WEB.json
我将这些基本源代码放入 main.go 文件中:

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()
}
templates/index.html 文件中的一些代码:

<!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>
运行应用程序时,出现获取错误:

未找到./web.json

那么我应该如何提供要在 gin 内部服务器中访问的 web.json 文件?


解决方案

引用原始杜松子酒文档: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")
}
所以基本上您应该在您定义的其他路由旁边定义一个特定于您的 json 文件的路由。然后使用它。

如果你想根据查询路径提供静态文件,你可以这样做:

func serve() {
    r := gin.Default()

    r.GET("/*path", func(c *gin.Context) {
        // read from file
        data, err := os.ReadFile("/path/to/file")
        if err != nil {
            // error handler
        }
        switch path.Ext(c.Request.URL.Path) {
        case ".html":
            c.Header("Content-Type", "text/html")
        case ".CSS":
            c.Header("Content-Type", "text/css")
        case ".js":
            c.Header("Content-Type", "application/javascript")
            // ...
        }
        _, _ = c.Writer.Write(data)
    })
    // Listen and serve on 0.0.0.0:8080
    panic(r.Run(":8080"))
}
今天带大家了解了的相关知识,希望对你有所帮助;

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title