【问题标题】:Golang gin: serving JSON and static files in the same appGolang gin:在同一个应用程序中提供 JSON 和静态文件
【发布时间】:2017-02-28 00:58:56
【问题描述】:

我正在编写一个同时提供 REST API 和静态文件的 golang gin 应用程序。理想情况下,我应该将后端和前端逻辑分开,但对于这种情况,我必须将它们放在一起。例如,API 的顶级路径是通配符,例如 http://myapp.com/{username}/{topic},并且同一端点还可以提供一些保留的静态资源,例如 http://myapp.com/js/app.jshttp://myapp.com/css/style.css

我知道这不是最佳实践,我应该将前端代码分开,但在我的案例中还有一些其他非技术挑战。 Gin 有一种方法可以从文件夹中提供静态文件,但我想提供指向一些已知资源(JS、CSS、字体等)的特定“保留”路径。我怎么能用 GIN 做到这一点?

我可以使用 Gin 模板来提供 index.html,但不知道如何使用其余资源。

【问题讨论】:

标签: go go-gin


【解决方案1】:

将文件放在相应的文件夹中(例如 .css 文件放在 css 文件夹中,.js 文件放在 js 文件夹中等)并将所有这些文件夹放在 assets 文件夹中。并使用

router := gin.Default()
router.Static("/assets", "./assets") 

您的终点将是http://myapp.com/assets/js/app.js,或http://myapp.com/assets/css/style.css check documentation

【讨论】:

  • 这不起作用,因为我已经将路径定义为 router.GET("/:path1", getPath1) 和 router.GET("/:path1/:path2", getPath2) ,并且当我添加 router.Static("/assets", "./assets") 时,杜松子酒会因错误“通配符路由 ':path1' 与路径 '/:path1' 中的现有子级冲突”而恐慌。也就是说,因为我已经有定义为通配符的路径段,我不能使用路由器。静态没有冲突,GIN 设计的一个古怪的决定。我希望我能找到一种方法来从通配符处理程序中为每个单独的静态文件提供服务。跨度>
【解决方案2】:
go get https://github.com/gin-contrib/static

然后导入:

import (

 "github.com/gin-contrib/static"
  
 )

使用这个:

router.Use(static.Serve("/assets", static.LocalFile("./templates", false)))

在模板中创建一个 css 和 js 文件夹并将 .css 和 .js 文件放在那里

  <link rel="stylesheet" href="/assets/css/{FileName}.css">

加载 .css 文件

注意:如果没有“assets”之前的“/”,它将无法工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多