我想选择是否在生产中使用Nginx,或者让Go使用应用程序使用的相同端口在root上提供静态内容(8000).这样开发环境就不需要安装Nginx.
所以,尝试像这样添加一个默认多路复用器的句柄
goji.DefaultMux.Handle("/*",serveStatic)func serveStatic(w http.ResponseWriter,r *http.Request) {//http.Servefile(w,r,r.URL.Path[1:])//http.fileServer(http.Dir("static"))http.StripPrefix("/static/",http.fileServer(http.Dir("static")))
}
在所有API路径都已注册之后执行此句柄(否则API将无效).
我已经尝试过任何类型的组合,它可以将我重定向到http 404,或者将HTML内容显示为文本.两者都不好.我想知道是否有人来过这里,可以让我了解我做错了什么.
谢谢.
虽然这与我的问题无关,但这里是我正在使用的Nginx配置:
server {Listen 80;# enable gzip compression gzip on; gzip_min_length 1100; gzip_buffers 4 32k; gzip_types text/plain application/x-JavaScript text/xml text/CSS; gzip_vary on;# end gzip configurationlocation / { root /home/mleyzaola/go/src/bitbucket.org/mauleyzaola/goerp/static; try_files $uri $uri/ /index.HTML = 404;}location /API { proxy_pass http://localhost:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
解决方法 我遇到过类似的问题,所以以下几点可能会有所帮助.>请记住将服务静态内容的处理程序注册为最终路由.否则,它可能匹配一切.
>也许尝试使用绝对路径而不是相对路径.
这是我用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()}
我用一个示例项目创建了以下GitHub存储库.我可以访问静态内容和API.
https://github.com/Retired/26320144
总结以上是内存溢出为你收集整理的Golang Goji:如何同时提供静态内容和api全部内容,希望文章能够帮你解决Golang Goji:如何同时提供静态内容和api所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)