具有命名参数的 Martini 路由无法加载静态文件

Martini routes with named parameter fails static files loading

我用 Martini 编写了我的第一个 Go 应用程序。我有带命名参数的路由:

m := martini.Classic()

staticOptions := martini.StaticOptions{Prefix: "assets"}
m.Use(martini.Static("assets", staticOptions))

m.Get("/edit/:id", editHandler)
m.Run()

editHandler 使用 bootstrap 样式表和脚本呈现编辑模板,相应地位于 assets/cssassets/js 文件夹中。

<link rel="stylesheet" type="text/css" href="assets/css/bootstrap.min.css">
<script type="text/javascript" src="assets/js/bootstrap.min.js"></script>

但是当我在浏览器中打开编辑页面时,我的静态文件没有加载,因为浏览器向 edit/assets/css/bootstrap.min.cssedit/assets/js/bootstrap.min.js 发出请求。 我如何去除任何路由前缀?('edit'、'show' 和其他)

您提供的 html 片段中的链接是相对链接。这意味着当浏览器解析 URL 时,它会将给定的路径附加到当前主机和路径,即 http://<hostname_and_port>/edit + assets/css/bootstrap.min.css

您可以使用根路径而不是相对路径来确保当浏览器解析 url 时,无论完整的 URL 路径是什么,它都会将给定路径附加到主机的根目录。这是通过在路径的开头放置一个正斜杠来完成的。在以下示例中,我向 srchref 属性路径添加了一个正斜杠。

<link rel="stylesheet" type="text/css" href="/assets/css/bootstrap.min.css">
<script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>