2017-04-25 53 views
0

我有一个去webserver的库,并且包含js文件,所以这应该是用户应用程序的目录树。 myapp是用户应用程序,mylib是通过go get获取的库。Golang在不同目录中提供静态文件

src 
`-- github.com 
    |-- mylib 
    | |-- myJSlib 
    | `-- myGOlib 
    `-- myapp 
     |-- main.go 
     `-- static 
      |-- index.html 
      |-- js 
      `-- css 

用户应用程序的Web服务器将服务于静态HTML中static子目录通过

http.Handle("/", http.FileServer(http.Dir("static")) 

我的问题是我不能包括库的脚本到index.html因为http.FileServer服务目录static。天真的解决方案是我将http.FileServer的根移动到src。但是这不是我想要的解决方案,因为在从src包含脚本时需要详细说明。另一种解决方案是我告诉用户将js文件移动到static目录中,如果用户处于生产模式并且我已经缩小了我的jslib版本,但是在需要结构化树文件夹的开发模式下这很好,但这无法解决问题。也许我可以分开repo为myGOlib和myJSlib,用户可以使用go get来获取myGOlib并将myJSlib克隆到静态目录中。但是我想用户只需简单地使用go get,并且一切都可以同时工作,而不需要再次将结构化。

任何解决方案,将不胜感激。感谢

回答

3

你可以添加第二个处理器的JavaScript,从不同的文件夹提供(甚至可能是配置):

thirdPartyDir := "<configuration driven dir name>" 
http.Handle("/", http.FileServer(http.Dir("static")) 
http.Handle("/thirdparty", http.FileServer(http.Dir(thirdPartyDir)) 

,然后在index.js您可以包含第三方代码,如:

<script src='/thirdparty/foo.js'/> 
+0

解决方案似乎合乎逻辑,我必须尝试它,但注册第二处理程序时遇到困难。看来我不能注册处理程序,除了“/”。我在浏览器中收到这个错误'GET http:// localhost:8080/thirdparty 404(Not Found)'。 – billyzaelani

+0

使用http.StripPrefix解决。谢谢 – billyzaelani

相关问题