Go语言 使用echo中间件和embed服务静态文件

g6ll5ycj  于 2023-05-11  发布在  Go
关注(0)|答案(2)|浏览(185)
project folder
->templates
  ->t.tmpl
->examples
  ->html
    ->blocks
      ->...
    ->assets
      ->...
    ->index.html

存在对<link rel="stylesheet" href="./blocks/index.css">调用,该<link rel="stylesheet" href="./blocks/index.css">又调用examples/html/blocks/examples/html/assets中的不同静态文件
我使用echo,设置如下:

e.Static("/i/blocks", "examples/html/blocks")
   e.Static("/i/assets", "examples/html/assets")
   e.Static("/i/blocks/body/examples/html/assets", "examples/html/assets")
   e.Static("/i/blocks/logo/examples/html/assets", "examples/html/assets")

   v1 := s.e.Group("/i")

   v1.GET("/:page-id", s.handlePageDetails)

它按预期工作,但
我想让它更简单,而不是硬编码。
希望能这样解决:

e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
        Root:       "examples/html",
        Browse:     true,
        IgnoreBase: true,
     }))

它似乎在本地工作,但后来发现可能是e.Static缓存或其他东西,因为它在我在更新期间重新启动IDE后停止工作。
回到square 1。
最后希望这样的东西(如果可能的话)工作:

e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
        Root:       "examples/html",
        Browse:     true,
        IgnoreBase: true,
        Filesystem: http.FS(project.StaticFiles),
     }))

在某个文件中的static.go在我的项目的根目录中

//go:embed examples/html
var StaticFiles embed.FS

不使用Echo不是一种选择。如果这不能通过中间件.StaticWithConfig实现,那么其他选项是受欢迎的,只要它看起来不像我用一堆e.Static为每一个路径的可能性。
还有它的运作方式所以有一个Get请求发到http://localhost:8080/i/:some-id- it调用template,template调用statics,这些请求看起来像i/块之类的,这就是为什么我用e.statics来删除/i/部分

blpfk2vs

blpfk2vs1#

我想这可以被认为是封闭的。与@Zeke Lu进行了长时间的讨论
在他的帮助下得出的结论是前端搞砸了大时间。当它被修复时,一切都可以用一行代码完成,然后随着服务的增长,还有很多很多代码。

qhhrdooz

qhhrdooz2#

最新消息。所以我决定再玩一会儿...@Zeke Lu提供的解决方案在不改变前端的情况下完美地解决了这个问题。
我所做的就是在tmp中创建路径。是<link rel="stylesheet" href="./blocks/index.css">制造<link rel="stylesheet" href="/static/blocks/index.css">
中间件现在得到了它应该得到的。
这个

e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
        Root:       "examples/html",
        Browse:     true,
        IgnoreBase: true,
     }))

解决了一切没有问题,没有一堆e.Static()
在本地和docker中使用cache和all检查和复查;工作完美
感谢@Zeke Lu的提示
祝大家编码愉快。

相关问题