前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 语言 Web 编程系列(七)—— 基于 gorilla/mux 包实现路由匹配:处理静态资源响应

Go 语言 Web 编程系列(七)—— 基于 gorilla/mux 包实现路由匹配:处理静态资源响应

作者头像
学院君
发布2020-01-17 15:36:14
1.3K0
发布2020-01-17 15:36:14
举报
文章被收录于专栏:学院君的专栏学院君的专栏

到目前为止,我们都是在处理动态资源,也就是 Go 代码实现的响应。HTTP 服务器除了处理动态资源之外,还应该具备处理静态资源的能力,比如 HTML、CSS、JavaScript、图片都属于静态资源的范畴。

要处理静态资源,需要借助 PathPrefix() 方法指定静态资源所在的路径前缀,然后在请求处理器中通过 http.FileServer 直接返回文件内容本身作为响应:

代码语言:javascript
复制
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,并初始化代码如下:

代码语言:javascript
复制
document.write("hello from javascript");

然后在 static 目录下放置一张图片 test.jpg 文件,启动这个 HTTP 服务器:

代码语言:javascript
复制
go run mux.go -dir=static

注意这里我们通过 dir 参数指定了静态资源的根目录为 static,如果不指定的话访问上述静态资源会报 404。

接下来,就可以在浏览器中访问服务器 static 目录下的静态资源了:

虽然 gorilla/mux 路由器提供了对静态资源的支持,但是通常我们还是会和 PHP 一样,基于 Nginx 来处理静态资源,然后将动态请求转发给 Go HTTP 服务器,因为 Nginx 作为一款强大的反向代理服务器,并发处理静态资源的能力非常强悍,没必要自己去处理这块逻辑。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客书房 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档