现代的 web 开发提倡前后端分离,当然 beego 原生支持 web应用开发,但是现在主流 web 开发都是通过 react 或者 vue 实现,和服务直接通过 REST API 交互。于是便想利用 beego 的静态文件发布能力发布 react 或 vue 开发的前端页面,这样,就可以实现简单 web 应用的快速部署和版本一致了。
https://gitee.com/truthalone/bee-web.git
1. 新建 beego 项目
bee new bee-web
cd bee-web
go mod int bee-web
go mod tidy
2. 修改配置
# conf/app.conf
# 增加配置
AutoRender=false
CopyRequestBody=true
3. 删除多余文件及目录
4. 将编译好的静态文件放到 static 目录下
5. 修改 router.go 实现静态文件发布
package routers
import (
"bee-web/controllers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
"net/http"
"path"
"strings"
)
func init() {
beego.InsertFilter("/", beego.BeforeRouter, WebServerFilter)
beego.InsertFilter("/*", beego.BeforeRouter, WebServerFilter)
beego.Router("/api/login/account", &controllers.BaseController{}, "post:Test")
}
//静态文件后缀
const staticFileExt = ".html|.js|.css|.png|.jpg|.jpeg|.ico|.otf"
//web 服务过滤器,实现静态文件发布
func WebServerFilter(ctx *context.Context) {
urlPath := ctx.Request.URL.Path
if urlPath == "" || urlPath == "/" {
urlPath = "index.html"
}
ext := path.Ext(urlPath)
if ext == "" {
return
}
index := strings.Index(staticFileExt, ext)
if index >= 0 {
http.ServeFile(ctx.ResponseWriter, ctx.Request, "static/"+urlPath)
}
}