bee api 是前后端分离的正确起点,因它默认禁用模板渲染、不建 views/static 目录、autorender=false、restful 路由注册、自带 tests/ 目录;生成后须检查 conf/app.conf、main.go 和 controllers/base.go 三处 autorender 配置。

直接用 bee api,别用 bee new —— 后者默认带模板渲染和 views/ 目录,硬改容易漏掉 conf/app.conf 里的 autorender = true,导致 context.Output.JSON() 被自动包装成 HTML 响应体,前端收不到纯 JSON。
为什么 bee api 才是前后端分离的正确起点
它生成的项目骨架天生适配 Vue/React 等前端框架:
- 不创建
views/和static/目录,省去手动删文件、关模板引擎的麻烦 -
conf/app.conf中默认设autorender = false,Output.JSON()直接吐出原始 JSON,不会套一层... -
routers/router.go用beego.NSInclude风格注册 RESTful 路由,比如NSInclude(&controllers.UserController{}),自动按 HTTP 方法分发到Get()、Post()等方法 - 自带
tests/目录,方便写单元测试,对接 CI 流程
bee api myservice 后必须检查的三处配置
生成完别急着写逻辑,先确认这些地方没被覆盖或忽略:
-
conf/app.conf中的autorender = false—— 如果你之前用过bee new,可能全局配置残留,这里必须显式设为false -
main.go里是否调用了beego.BConfig.WebConfig.AutoRender = false—— 不推荐在代码里硬写,优先走配置文件;但若有人手动改过,这里会覆盖app.conf -
controllers/base.go(如果存在)是否重写了Prepare()并误调了c.TplName = "xxx.tpl"—— 这种写法会强制触发模板渲染,哪怕autorender = false也无效
前端发请求时后端返回 HTML 而不是 JSON?查这三点
典型现象:Vue 调 axios.post("/api/login", {...}),响应状态码是 200,但 response.data 是一整页 HTML 字符串,控制台报 Unexpected token 。
- 第一反应查
conf/app.conf:确认autorender = false,且没被注释或拼错成auto_render - 再看控制器方法里有没有调
this.ServeJSON()—— 它等价于this.Output.JSON(...),但如果你手写了this.Ctx.Output.Body(...)或this.Ctx.Output.Render(),就绕过了 JSON 自动处理逻辑 - 最后检查路由注册方式:如果用了
beego.Router("/api/login", &controllers.LoginController{}, "post:Login")这种老式写法,要确保Login()方法里没漏掉return或提前StopRun(),否则可能掉进默认渲染流程
最易被忽略的是 autorender 配置项的位置和优先级 —— 它既能在 app.conf 里设,也能在 main.go 或 controllers 里动态改,三者冲突时以运行时最后一次赋值为准。上线前务必用 curl -v http://localhost:8080/api/ping 实测响应头 Content-Type 是否为 application/json,而不是 text/html。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











