如何理解基于gorilla/mux 包实现路由匹配的处理静态资源响应
今天就跟大家聊聊有关如何理解基于gorilla/mux 包实现路由匹配的处理静态资源响应,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
到目前为止,我们都是在处理动态资源,也就是 Go 代码实现的响应。HTTP 服务器除了处理动态资源之外,还应该具备处理静态资源的能力,比如 HTML、CSS、JavaScript、图片都属于静态资源的范畴。
要处理静态资源,需要借助 PathPrefix()
方法指定静态资源所在的路径前缀,然后在请求处理器中通过 http.FileServer
直接返回文件内容本身作为响应:
func main() {
r := mux.NewRouter()
r.Use(loggingMiddleware)
// 解析服务器启动参数 dir 作为静态资源 Web 根目录
// 默认是当前目录 .
var dir string
flag.StringVar(&dir, "dir", ".", "静态资源所在目录,默认为当前目录")
flag.Parse()
// 处理形如 http://localhost:8000/static/<filename> 的静态资源路由
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir))))
// 其它路由
...
log.Fatal(http.ListenAndServe(":8080", r))
}
以上述代码为例,当我们请求 http://localhost:8080/static/app.js
文件时,会到 static
目录下查找 app.js
,如果找不到会返回 404,否则返回文件本身作为响应。
我们试着在上述入口文件所在目录下创建 static/app.js
,并初始化代码如下:
document.write("hello from javascript");
然后在 static
目录下放置一张图片 test.jpg
文件,启动这个 HTTP 服务器:
go run mux.go -dir=static
注意这里我们通过 dir
参数指定了静态资源的根目录为 static
,如果不指定的话访问上述静态资源会报 404。
接下来,就可以在浏览器中访问服务器 static
目录下的静态资源了:
虽然 gorilla/mux
路由器提供了对静态资源的支持,但是通常我们还是会和 PHP 一样,基于 Nginx 来处理静态资源,然后将动态请求转发给 Go HTTP 服务器,因为 Nginx 作为一款强大的反向代理服务器,并发处理静态资源的能力非常强悍,没必要自己去处理这块逻辑。
看完上述内容,你们对如何理解基于gorilla/mux 包实现路由匹配的处理静态资源响应有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。