0

我在使用 Go Fiber 的静态文件服务器时遇到问题。我想加载一个在模板中使用的 CSS 样式表。模板本身工作正常。

func main() {
    // Create a new engine.
    engine := html.New("./views", ".html")

    // Fiber instance
    app := fiber.New(fiber.Config{Views: engine})

    app.Static("/static", "./views")

    app.Get("/layout", func(c *fiber.Ctx) error {
        // Render index within layouts/main
        return c.Render("index", fiber.Map{
            "Title": "Hello, World!",
        }, "layouts/main")
    })

    // Start server
    log.Print(app.Listen(":3000"))

}

我的文件结构在哪里:(其中 a -> 表示它是一个目录)

-> views
    -> layouts
        main.css
        main.html
    index.html
main.go

main.html 的内容是:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="static/layouts/main.css">

    <title>Hello, world!</title>
</head>
<body>
{{embed}}
</body>
</html>

文件 ./views 肯定存在,因为当我将它添加到 main 时,没有任何内容被打印到日志中:

if _, err := os.Stat("./views"); os.IsNotExist(err) {
    log.Print("Path doesn't exist")
}

当我在 localhost 上运行它并使用检查元素查看网络时, http: //127.0.0.1 :3000/static/layouts/main.css被正确查询但抛出 404 错误。如果我去http://127.0.0.1:3000/static我会收到一条消息说Cannot GET /static。我认为这可能是文件路径问题,但我尝试了许多不同的 .s、/s 等组合,但一无所获。

如何解决这个 404 错误?

4

1 回答 1

1

我找到了解决办法。当我将样式表移到他们自己的文件夹中时,css 工作得很好。

因此我现在的文件结构是这样的:


-> styles
    main.css
-> views
    -> layouts
        main.html
    index.html
main.go

而在func main(),静态服务器现在是app.Static("/static", "./styles")。没有其他任何改变。

于 2020-11-16T13:58:29.893 回答