Golang Goji:如何同时提供静态内容和api

Golang Goji:如何同时提供静态内容和api,第1张

概述过去两周我一直在玩Golang,最后可以开始真正的应用程序.它使用NGINX提供静态 HTML文件,API使用Goji Web Framework作为后端.我不使用任何Golang模板,因为一切都是Angular.Js,所以静态可以满足我的需求. 我想选择是否在生产中使用NGINX,或者让Go使用应用程序使用的相同端口在root上提供静态内容(8000).这样开发环境就不需要安装NGINX. 所 过去两周我一直在玩Golang,最后可以开始真正的应用程序.它使用Nginx提供的静态 HTML文件,API使用Goji Web Framework作为后端.我不使用任何Golang模板,因为一切都是Angular.Js,所以静态可以满足我的需求.

我想选择是否在生产中使用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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存