beego环境部署
部署前,先确认好golang已安装并配置完GOROOT、GOPATH;还需安装好git版本编排工具(sudo apt-get install git)并配置好环境变量,后面下载beego使用命令go get github.com/astaxie/beego需要用到git和go等
配置好go和git后,正式部署beego环境,linux和windows环境部署类似:
#从github上下载beego和bee工具 go get -v -u github.com/astaxie/beego go get -v -u github.com/beego/bee #安装bee后,会将bee命令放在GOPATH/bin路径下,所以还要配置bee的环境变量 vim .profile export PATH=/usr/local/go/bin/:$PATH export GOPATH=$HOME/go export PATH=$GOPATH/bin/:$PATH source .profile #快速建立一个应用来检测安装 cd $GOPATH/src bee new hello #这个命令在任何目录下执行都会在$GOPATH/src下创建应用 cd hello bee run #这个命令必须在要运行应用的目录下执行,只有进入应用,才可执行main.go
路由设置
固定路由:也就是全匹配的路由。一个固定的路由,一个控制器,然后根据用户请求方法不同请求控制器中对应的方法,使用beego默认的请求方法,用户 Get 请求就执行 Get 方法,Post 请求就执行 Post 方法。
beego.Router("/", &controllers.MainController{}) beego.Router("/admin", &admin.UserController{}) beego.Router("/admin/index", &admin.ArticleController{}) beego.Router("/admin/addpkg", &admin.AddController{})
正则路由:为了更加方便的路由设置,beego 参考了 sinatra 的路由实现,支持多种方式的路由
beego.Router(“/api/?:id”, &controllers.RController{}) 默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123” beego.Router(“/api/:id”, &controllers.RController{}) 默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”,但URL”/api/“匹配失败 beego.Router(“/api/:id([0-9]+)“, &controllers.RController{}) 自定义正则匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123” beego.Router(“/user/:username([\\w]+)“, &controllers.RController{}) 正则字符串匹配 //例如对于URL”/user/astaxie”可以匹配成功,此时变量”:username”值为”astaxie” beego.Router(“/download/*.*”, &controllers.RController{}) *匹配方式 //例如对于URL”/download/file/api.xml”可以匹配成功,此时变量”:path”值为”file/api”, “:ext”值为”xml” beego.Router(“/download/ceshi/*“, &controllers.RController{}) *全匹配方式 //例如对于URL”/download/ceshi/file/api.json”可以匹配成功,此时变量”:splat”值为”file/api.json” beego.Router(“/:id:int”, &controllers.RController{}) int 类型设置方式,匹配 :id为int 类型,框架帮你实现了正则 ([0-9]+) beego.Router(“/:hi:string”, &controllers.RController{}) string 类型设置方式,匹配 :hi 为 string 类型。框架帮你实现了正则 ([\w]+) beego.Router(“/cms_:id([0-9]+).html”, &controllers.CmsController{}) 带有前缀的自定义正则 //匹配 :id 为正则类型。匹配 cms_123.html 这样的 url :id = 123
例如匹配正则:beego.Router(“/cms_:id:int.html”,&controllers.IndexController{}),对应的逻辑控制端代码如下
#正则路由配置: #说明下,如果路由中使用了自定义方法的话,那么默认的get(),post()方法都要重新声明 func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/index/?cmd_:id:int.html", &controllers.IndexController{},"get:GetShow;post:Post") } #逻辑控制端配置: func (t *IndexController) GetShow(){ t.Data["name"] = "index" t.Data["gender"] = "male" t.Data["hello"] = "world" t.TplName = "index.html" name := t.GetString(":name") beego.Info("name=",name) } func (t *IndexController) Post(){ t.Data["name"] = "blockchain" t.TplName = "index.html" } #假如用户在前端输入http://localhost:8080/index/cmd_123.html #在goland IDE控制台获取到name健的输出为: 2019/01/16 19:23:02.394 [I] [default.go:21] name= 123