mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 19:00:54 +00:00
optimize the app structure
This commit is contained in:
parent
45b72b0674
commit
eb3479b753
189
app.go
189
app.go
@ -20,12 +20,22 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/http/fcgi"
|
"net/http/fcgi"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/astaxie/beego/grace"
|
"github.com/astaxie/beego/grace"
|
||||||
"github.com/astaxie/beego/utils"
|
"github.com/astaxie/beego/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
BeeApp *App
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// create beego application
|
||||||
|
BeeApp = NewApp()
|
||||||
|
}
|
||||||
|
|
||||||
// App defines beego application with a new PatternServeMux.
|
// App defines beego application with a new PatternServeMux.
|
||||||
type App struct {
|
type App struct {
|
||||||
Handlers *ControllerRegister
|
Handlers *ControllerRegister
|
||||||
@ -170,3 +180,182 @@ func (app *App) Run() {
|
|||||||
}
|
}
|
||||||
<-endRunning
|
<-endRunning
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Router adds a patterned controller handler to BeeApp.
|
||||||
|
// it's an alias method of App.Router.
|
||||||
|
// usage:
|
||||||
|
// simple router
|
||||||
|
// beego.Router("/admin", &admin.UserController{})
|
||||||
|
// beego.Router("/admin/index", &admin.ArticleController{})
|
||||||
|
//
|
||||||
|
// regex router
|
||||||
|
//
|
||||||
|
// beego.Router("/api/:id([0-9]+)", &controllers.RController{})
|
||||||
|
//
|
||||||
|
// custom rules
|
||||||
|
// beego.Router("/api/list",&RestController{},"*:ListFood")
|
||||||
|
// beego.Router("/api/create",&RestController{},"post:CreateFood")
|
||||||
|
// beego.Router("/api/update",&RestController{},"put:UpdateFood")
|
||||||
|
// beego.Router("/api/delete",&RestController{},"delete:DeleteFood")
|
||||||
|
func Router(rootpath string, c ControllerInterface, mappingMethods ...string) *App {
|
||||||
|
BeeApp.Handlers.Add(rootpath, c, mappingMethods...)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Router add list from
|
||||||
|
// usage:
|
||||||
|
// beego.Include(&BankAccount{}, &OrderController{},&RefundController{},&ReceiptController{})
|
||||||
|
// type BankAccount struct{
|
||||||
|
// beego.Controller
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// register the function
|
||||||
|
// func (b *BankAccount)Mapping(){
|
||||||
|
// b.Mapping("ShowAccount" , b.ShowAccount)
|
||||||
|
// b.Mapping("ModifyAccount", b.ModifyAccount)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
// //@router /account/:id [get]
|
||||||
|
// func (b *BankAccount) ShowAccount(){
|
||||||
|
// //logic
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// //@router /account/:id [post]
|
||||||
|
// func (b *BankAccount) ModifyAccount(){
|
||||||
|
// //logic
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// the comments @router url methodlist
|
||||||
|
// url support all the function Router's pattern
|
||||||
|
// methodlist [get post head put delete options *]
|
||||||
|
func Include(cList ...ControllerInterface) *App {
|
||||||
|
BeeApp.Handlers.Include(cList...)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// RESTRouter adds a restful controller handler to BeeApp.
|
||||||
|
// its' controller implements beego.ControllerInterface and
|
||||||
|
// defines a param "pattern/:objectId" to visit each resource.
|
||||||
|
func RESTRouter(rootpath string, c ControllerInterface) *App {
|
||||||
|
Router(rootpath, c)
|
||||||
|
Router(path.Join(rootpath, ":objectId"), c)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// AutoRouter adds defined controller handler to BeeApp.
|
||||||
|
// it's same to App.AutoRouter.
|
||||||
|
// if beego.AddAuto(&MainContorlller{}) and MainController has methods List and Page,
|
||||||
|
// visit the url /main/list to exec List function or /main/page to exec Page function.
|
||||||
|
func AutoRouter(c ControllerInterface) *App {
|
||||||
|
BeeApp.Handlers.AddAuto(c)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// AutoPrefix adds controller handler to BeeApp with prefix.
|
||||||
|
// it's same to App.AutoRouterWithPrefix.
|
||||||
|
// if beego.AutoPrefix("/admin",&MainContorlller{}) and MainController has methods List and Page,
|
||||||
|
// visit the url /admin/main/list to exec List function or /admin/main/page to exec Page function.
|
||||||
|
func AutoPrefix(prefix string, c ControllerInterface) *App {
|
||||||
|
BeeApp.Handlers.AddAutoPrefix(prefix, c)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for Get method
|
||||||
|
// usage:
|
||||||
|
// beego.Get("/", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Get(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Get(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for Post method
|
||||||
|
// usage:
|
||||||
|
// beego.Post("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Post(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Post(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for Delete method
|
||||||
|
// usage:
|
||||||
|
// beego.Delete("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Delete(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Delete(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for Put method
|
||||||
|
// usage:
|
||||||
|
// beego.Put("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Put(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Put(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for Head method
|
||||||
|
// usage:
|
||||||
|
// beego.Head("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Head(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Head(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for Options method
|
||||||
|
// usage:
|
||||||
|
// beego.Options("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Options(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Options(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for Patch method
|
||||||
|
// usage:
|
||||||
|
// beego.Patch("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Patch(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Patch(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for all method
|
||||||
|
// usage:
|
||||||
|
// beego.Any("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Any(rootpath string, f FilterFunc) *App {
|
||||||
|
BeeApp.Handlers.Any(rootpath, f)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// register router for own Handler
|
||||||
|
// usage:
|
||||||
|
// beego.Handler("/api", func(ctx *context.Context){
|
||||||
|
// ctx.Output.Body("hello world")
|
||||||
|
// })
|
||||||
|
func Handler(rootpath string, h http.Handler, options ...interface{}) *App {
|
||||||
|
BeeApp.Handlers.Handler(rootpath, h, options...)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertFilter adds a FilterFunc with pattern condition and action constant.
|
||||||
|
// The pos means action constant including
|
||||||
|
// beego.BeforeStatic, beego.BeforeRouter, beego.BeforeExec, beego.AfterExec and beego.FinishRouter.
|
||||||
|
// The bool params is for setting the returnOnOutput value (false allows multiple filters to execute)
|
||||||
|
func InsertFilter(pattern string, pos int, filter FilterFunc, params ...bool) *App {
|
||||||
|
BeeApp.Handlers.InsertFilter(pattern, pos, filter, params...)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
195
beego.go
195
beego.go
@ -15,9 +15,7 @@
|
|||||||
package beego
|
package beego
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"path"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -28,178 +26,12 @@ import (
|
|||||||
// beego web framework version.
|
// beego web framework version.
|
||||||
const VERSION = "1.5.0"
|
const VERSION = "1.5.0"
|
||||||
|
|
||||||
type hookfunc func() error //hook function to run
|
//hook function to run
|
||||||
var hooks []hookfunc //hook function slice to store the hookfunc
|
type hookfunc func() error
|
||||||
|
|
||||||
// Router adds a patterned controller handler to BeeApp.
|
var (
|
||||||
// it's an alias method of App.Router.
|
hooks = make([]hookfunc, 0) //hook function slice to store the hookfunc
|
||||||
// usage:
|
)
|
||||||
// simple router
|
|
||||||
// beego.Router("/admin", &admin.UserController{})
|
|
||||||
// beego.Router("/admin/index", &admin.ArticleController{})
|
|
||||||
//
|
|
||||||
// regex router
|
|
||||||
//
|
|
||||||
// beego.Router("/api/:id([0-9]+)", &controllers.RController{})
|
|
||||||
//
|
|
||||||
// custom rules
|
|
||||||
// beego.Router("/api/list",&RestController{},"*:ListFood")
|
|
||||||
// beego.Router("/api/create",&RestController{},"post:CreateFood")
|
|
||||||
// beego.Router("/api/update",&RestController{},"put:UpdateFood")
|
|
||||||
// beego.Router("/api/delete",&RestController{},"delete:DeleteFood")
|
|
||||||
func Router(rootpath string, c ControllerInterface, mappingMethods ...string) *App {
|
|
||||||
BeeApp.Handlers.Add(rootpath, c, mappingMethods...)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// Router add list from
|
|
||||||
// usage:
|
|
||||||
// beego.Include(&BankAccount{}, &OrderController{},&RefundController{},&ReceiptController{})
|
|
||||||
// type BankAccount struct{
|
|
||||||
// beego.Controller
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// register the function
|
|
||||||
// func (b *BankAccount)Mapping(){
|
|
||||||
// b.Mapping("ShowAccount" , b.ShowAccount)
|
|
||||||
// b.Mapping("ModifyAccount", b.ModifyAccount)
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
// //@router /account/:id [get]
|
|
||||||
// func (b *BankAccount) ShowAccount(){
|
|
||||||
// //logic
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// //@router /account/:id [post]
|
|
||||||
// func (b *BankAccount) ModifyAccount(){
|
|
||||||
// //logic
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// the comments @router url methodlist
|
|
||||||
// url support all the function Router's pattern
|
|
||||||
// methodlist [get post head put delete options *]
|
|
||||||
func Include(cList ...ControllerInterface) *App {
|
|
||||||
BeeApp.Handlers.Include(cList...)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESTRouter adds a restful controller handler to BeeApp.
|
|
||||||
// its' controller implements beego.ControllerInterface and
|
|
||||||
// defines a param "pattern/:objectId" to visit each resource.
|
|
||||||
func RESTRouter(rootpath string, c ControllerInterface) *App {
|
|
||||||
Router(rootpath, c)
|
|
||||||
Router(path.Join(rootpath, ":objectId"), c)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// AutoRouter adds defined controller handler to BeeApp.
|
|
||||||
// it's same to App.AutoRouter.
|
|
||||||
// if beego.AddAuto(&MainContorlller{}) and MainController has methods List and Page,
|
|
||||||
// visit the url /main/list to exec List function or /main/page to exec Page function.
|
|
||||||
func AutoRouter(c ControllerInterface) *App {
|
|
||||||
BeeApp.Handlers.AddAuto(c)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// AutoPrefix adds controller handler to BeeApp with prefix.
|
|
||||||
// it's same to App.AutoRouterWithPrefix.
|
|
||||||
// if beego.AutoPrefix("/admin",&MainContorlller{}) and MainController has methods List and Page,
|
|
||||||
// visit the url /admin/main/list to exec List function or /admin/main/page to exec Page function.
|
|
||||||
func AutoPrefix(prefix string, c ControllerInterface) *App {
|
|
||||||
BeeApp.Handlers.AddAutoPrefix(prefix, c)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for Get method
|
|
||||||
// usage:
|
|
||||||
// beego.Get("/", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Get(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Get(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for Post method
|
|
||||||
// usage:
|
|
||||||
// beego.Post("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Post(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Post(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for Delete method
|
|
||||||
// usage:
|
|
||||||
// beego.Delete("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Delete(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Delete(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for Put method
|
|
||||||
// usage:
|
|
||||||
// beego.Put("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Put(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Put(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for Head method
|
|
||||||
// usage:
|
|
||||||
// beego.Head("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Head(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Head(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for Options method
|
|
||||||
// usage:
|
|
||||||
// beego.Options("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Options(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Options(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for Patch method
|
|
||||||
// usage:
|
|
||||||
// beego.Patch("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Patch(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Patch(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for all method
|
|
||||||
// usage:
|
|
||||||
// beego.Any("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Any(rootpath string, f FilterFunc) *App {
|
|
||||||
BeeApp.Handlers.Any(rootpath, f)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// register router for own Handler
|
|
||||||
// usage:
|
|
||||||
// beego.Handler("/api", func(ctx *context.Context){
|
|
||||||
// ctx.Output.Body("hello world")
|
|
||||||
// })
|
|
||||||
func Handler(rootpath string, h http.Handler, options ...interface{}) *App {
|
|
||||||
BeeApp.Handlers.Handler(rootpath, h, options...)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetViewsPath sets view directory path in beego application.
|
// SetViewsPath sets view directory path in beego application.
|
||||||
func SetViewsPath(path string) *App {
|
func SetViewsPath(path string) *App {
|
||||||
@ -228,15 +60,6 @@ func DelStaticPath(url string) *App {
|
|||||||
return BeeApp
|
return BeeApp
|
||||||
}
|
}
|
||||||
|
|
||||||
// InsertFilter adds a FilterFunc with pattern condition and action constant.
|
|
||||||
// The pos means action constant including
|
|
||||||
// beego.BeforeStatic, beego.BeforeRouter, beego.BeforeExec, beego.AfterExec and beego.FinishRouter.
|
|
||||||
// The bool params is for setting the returnOnOutput value (false allows multiple filters to execute)
|
|
||||||
func InsertFilter(pattern string, pos int, filter FilterFunc, params ...bool) *App {
|
|
||||||
BeeApp.Handlers.InsertFilter(pattern, pos, filter, params...)
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// The hookfunc will run in beego.Run()
|
// The hookfunc will run in beego.Run()
|
||||||
// such as sessionInit, middlerware start, buildtemplate, admin start
|
// such as sessionInit, middlerware start, buildtemplate, admin start
|
||||||
func AddAPPStartHook(hf hookfunc) {
|
func AddAPPStartHook(hf hookfunc) {
|
||||||
@ -310,12 +133,10 @@ func initBeforeHttpRun() {
|
|||||||
|
|
||||||
if AutoRender {
|
if AutoRender {
|
||||||
err := BuildTemplate(ViewsPath)
|
err := BuildTemplate(ViewsPath)
|
||||||
if err != nil {
|
if err != nil && RunMode == "dev" {
|
||||||
if RunMode == "dev" {
|
|
||||||
Warn(err)
|
Warn(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
registerDefaultErrorHandler()
|
registerDefaultErrorHandler()
|
||||||
|
|
||||||
@ -338,7 +159,3 @@ func TestBeegoInit(apppath string) {
|
|||||||
os.Chdir(AppPath)
|
os.Chdir(AppPath)
|
||||||
initBeforeHttpRun()
|
initBeforeHttpRun()
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
|
||||||
hooks = make([]hookfunc, 0)
|
|
||||||
}
|
|
||||||
|
@ -29,7 +29,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
BeeApp *App // beego application
|
|
||||||
AppName string
|
AppName string
|
||||||
AppPath string
|
AppPath string
|
||||||
workPath string
|
workPath string
|
||||||
@ -215,9 +214,6 @@ func (b *beegoAppConfig) SaveConfigFile(filename string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
// create beego application
|
|
||||||
BeeApp = NewApp()
|
|
||||||
|
|
||||||
workPath, _ = os.Getwd()
|
workPath, _ = os.Getwd()
|
||||||
workPath, _ = filepath.Abs(workPath)
|
workPath, _ = filepath.Abs(workPath)
|
||||||
// initialize default configurations
|
// initialize default configurations
|
||||||
|
Loading…
Reference in New Issue
Block a user