上篇关于走模板库应用的文章最后我们留下一个问题,页面模板是通过CDN引用的引导的css, js文件。到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响应给客户端。使用和配置过Nginx服务器的一定知道Nginx天然支持静态资源的访问,那么我们是不是也要借助Nginx才能实现处理静态文件请求呢?其实不是,在最开始的文章我们说过“去语言不需要依赖任何第三方组件就能构建并启动一个高并发的HTTP服务器。”,这篇文章就让我们了解一下如何用去语言的net/http库实现处理静态资源请求的问题。
我们先用一个简单的例子学习一下使用net/http如何创建一个静态资源服务器,然后再应用到我们的http_demo项目中。
我们新建一个主要。去存放创建静态资源服务器和监听请求的代码,同时在相同目录下创建资产/css和资产/js目录用于存放上篇文章页面模板使用到的静态文件。
main.go 资产/└──css └──bootstrap.min.css └──js └──bootstrap.min.js
主要。中去的代码如下:
主要包 进口"net/http” 函数main () { fs:=http.FileServer (http.Dir(“资产/?) http。处理(“/静态/http。StripPrefix(“/静态/fs)) http。nil ListenAndServe (“8080”) } >之前
-
<李>首先我们使用http。FileServer创建一个使用给定文件系统的内容响应所有HTTP请求的处理程序。李>
<李> http。处理(“/静态/http。StripPrefix(“/静态/fs))让文件服务器使用资产目录下的文件响应URL路径以静态/开头的所有HTTP请求。李>
<李>资产被设置为文件服务器的文件系统根目录,文件服务器会处理以/静态开头的URL的请求,所以我们需要使用http.StripPrefix()把静态前缀去掉才能在资产目录中搜索到请求的文件。李>
运行程序,然后用旋度请求一下css文件,看看有没有奏效。
美元去运行main.go 美元curl - s http://localhost: 8080/静态/css/styles。css/* ! *引导v3.3.7 (http://getbootstrap.com) * 2011 - 2016版权Twitter Inc .。 …… >之前
上面的例子中文件服务器的处理程序是注册到net/http库提供的标准的ServeMux(服务复用器)中的,我们http_demo项目为了支持复杂的路由注册使用的是gorillia/mux库提供的服务复用器。两者的工作方式不太一样,所以把文件服务器应用到我们项目里还需要做些调整才能起作用。
首先我们先把资产目录整个拷贝到项目的根目录。
func RegisterRoutes (r * mux.Router) {//静态文件请求服务 fs:=http.FileServer (http.Dir(“资产/?) serveFileHandler:=http。StripPrefix(“/静态/fs) r.PathPrefix(“/静态/?.Handler (serveFileHandler) …… }
-
<李>使用<代码> router.PathPrefix(“/静态”)代码>创建一个匹配有/静态前缀请求的路由。
李> <李>然后使用的路线。处理方法将文件服务器注册成路由对应的处理程序(处理程序是* mux。路线上的方法)。
李>
注册好文件服务器后,我们把之前页面模板引用的CDN上的js和css文件换成自己服务器上的文件链接。
& lt; html lang=癳n”比; & lt; head> …… & lt;链接的href=" https://www.yisu.com/static/css/bootstrap.min.css " rel=巴獠縩ofollow”rel=把奖怼北? & lt;/head> & lt; body> {{模板“导航”。}} & lt; div类="容器"比; {{模板“内容”。}} & lt;/div>& lt; !——/容器——比; & lt;脚本src=" https://www.yisu.com/static/js/bootstrap.min.js "祝辞& lt;/script> & lt;/body> & lt;/html>
然后重启服务器,访问之前的页面http: localhost:/视图/索引,验证一下我们的服务器现在是否能伺服静态文件的请求了。
页面样式正常,现在只要在服务器这个资产目录下的文件,我们都可以通过http://localhost: 8000/静态/*路径的URL访问到。
到此这篇关于使用去语言创建静态文件服务器的文章就介绍到这了,更多相关去静态文件服务器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!