具有命名参数的 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/css
和 assets/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.css
和 edit/assets/js/bootstrap.min.js
发出请求。
我如何去除任何路由前缀?('edit'、'show' 和其他)
您提供的 html 片段中的链接是相对链接。这意味着当浏览器解析 URL 时,它会将给定的路径附加到当前主机和路径,即 http://<hostname_and_port>/edit + assets/css/bootstrap.min.css
。
您可以使用根路径而不是相对路径来确保当浏览器解析 url 时,无论完整的 URL 路径是什么,它都会将给定路径附加到主机的根目录。这是通过在路径的开头放置一个正斜杠来完成的。在以下示例中,我向 src
和 href
属性路径添加了一个正斜杠。
<link rel="stylesheet" type="text/css" href="/assets/css/bootstrap.min.css">
<script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
我用 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/css
和 assets/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.css
和 edit/assets/js/bootstrap.min.js
发出请求。
我如何去除任何路由前缀?('edit'、'show' 和其他)
您提供的 html 片段中的链接是相对链接。这意味着当浏览器解析 URL 时,它会将给定的路径附加到当前主机和路径,即 http://<hostname_and_port>/edit + assets/css/bootstrap.min.css
。
您可以使用根路径而不是相对路径来确保当浏览器解析 url 时,无论完整的 URL 路径是什么,它都会将给定路径附加到主机的根目录。这是通过在路径的开头放置一个正斜杠来完成的。在以下示例中,我向 src
和 href
属性路径添加了一个正斜杠。
<link rel="stylesheet" type="text/css" href="/assets/css/bootstrap.min.css">
<script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>