自己尝试着做一个前后端分离的小项目,前端 vuejs 后端 gin, 我之前一直以为前后端路由在服务器上面都开着然后进行访问。最近试了下 vue.js 的部署,发现 vuejs 直接打包过去不行,网上说是要 npm run build 打包成静态网页。 网上搜了一下,知乎上面有这个问题: https://www.zhihu.com/question/46630687
相关的是说要用 nginx 。
有没有不用 nginx 的方法?
1
rrfeng 2020-08-27 11:06:10 +08:00 1
gin.ServeStatic() 之类的
|
2
yaphets666 2020-08-27 11:10:36 +08:00
nginx 主要解决跨域问题和负载均衡.你这不存在负载均衡.但是你不用 nginx 怎么解决跨域问题呢? 不解决跨域问题当然不行啊 接口都访问不了. 还有你 vue 项目中的静态文件的引用路径 这都是问题
|
3
XCFOX 2020-08-27 11:15:30 +08:00 1
你还可以用 caddy https://caddyserver.com/
比 nginx 方便很多,还能自动 https |
4
jizhihaoSAMA OP @yaphets666 跨域问题通过 gin 已经解决了。我在本地上 前端路由跑 8080 端口,后端跑 8081 端口,设置好跨域问题后是能够正常进行交互的
|
5
maichael 2020-08-27 11:17:44 +08:00
……,静态文件要解决啥跨域问题,你后端路由直接指向静态文件不就好了?后端的接口就前缀加 api 之类的。
|
6
saltbo 2020-08-27 16:44:17 +08:00 1
这个最佳实践是开发环境在 vue.config.js 配置 web-dev-server 来代理后端接口。 生产环境通过 gin 来挂载静态文件。当然,更好的方式是直接嵌入到 go 源码中。可以参考我正在做的开源项目 zpan
https://github.com/saltbo/zpan https://github.com/saltbo/zpan-front master 比较老了,develop 分支正在重构中... |
7
MrTreasure 2020-08-27 17:42:10 +08:00 1
服务端的接口统一挂到路由 /api 下面
gin 开启一个静态服务地址,把除了 /api 接口的请求都重定向到这里,静态服务里面就放 vue 打包后的产物。以后前端更新就跑脚本直接替换就行了。 这样做的好处就是没有跨域问题了 |
8
jaylee4869 2020-08-27 18:00:57 +08:00 1
本质上还是需要一个 HTTP 服务器嘛。不用 Nginx 很方便,还是推荐使用。跨域问题放 gin 下托管到 /api 没问题,但其实更好的解决方案是浏览器 cors 吧。前后端都分离了,没必要放一起。
|
9
JerryCha 2020-08-27 22:05:30 +08:00
那就在 server 跑 dev 模式(逃
|
10
jizhihaoSAMA OP @JerryCha 有轮子哥那味了
|
11
stone981023 2020-09-09 20:34:26 +08:00
@yaphets666 你在同一个 URL 下不会有跨域问题的, 都是 Gin 分配的路由 ,协议, url 端口号 都一样的
|