2 回答
TA贡献1780条经验 获得超5个赞
我遇到了类似的问题,所以也许以下几点会有所帮助。
请记住将用于提供静态内容的处理程序注册为最终路由。否则,它可能匹配所有内容。
也许尝试使用绝对路径而不是相对路径。
这是我如何使用 Goji 设置路线的简化版本。
func apiExampleHandler(context web.C, resp http.ResponseWriter, req *http.Request) {
fmt.Fprint(resp, "You've hit the API!")
}
func main() {
goji.Handle("/api", apiExampleHandler)
// Static file handler should generally be the last handler registered. Otherwise, it'll match every path.
// Be sure to use an absolute path.
staticFilesLocation := "Some absolute to the directory with your static content."
goji.Handle("/*", http.FileServer(http.Dir(staticFilesLocation)))
goji.Serve()
}
TA贡献1880条经验 获得超4个赞
如果您可以完全控制您的 URL,一个简单的策略是在顶层划分它们。我/a
在所有应用程序 URL/s
的开头和所有静态 URL 的开头使用。这使得路由非常简单。
我用了一段时间 Goji,然后切换到 Gocraft-web。但原则是相同的,因为 URL 对任何一个框架都是明确的。Gocraft-web 显然可以做子路由;我认为 Goji 也可以这样做,但不太明显。子路由之所以有用,有以下几个原因:
这是消除歧义的简单方法
如果路由器的搜索模式更简单,它可能会更快
你可以分割你的代码,这样可能更容易理解
如果您在生产中提供静态资产,您可能希望对其进行测量并提高其性能。我发现预压缩 (gzip) 我的 JS 和 CSS 文件可以提供帮助。我在同一个文件系统中有未压缩和压缩版本,并且我有一个定制的静态资产包,可以发现预压缩文件并将它们提供给所有理解的客户端(几乎所有浏览器)。此外,设定未来的到期日也值得探讨。这两个想法都内置在 Nginx 中,只需付出一点努力就可以很容易地编写代码。
- 2 回答
- 0 关注
- 242 浏览
添加回答
举报