mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 12:30:54 +00:00
optimize the beego structure
This commit is contained in:
parent
eb3479b753
commit
85d8ec5ca6
138
beego.go
138
beego.go
@ -19,8 +19,6 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/astaxie/beego/session"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// beego web framework version.
|
// beego web framework version.
|
||||||
@ -33,33 +31,6 @@ var (
|
|||||||
hooks = make([]hookfunc, 0) //hook function slice to store the hookfunc
|
hooks = make([]hookfunc, 0) //hook function slice to store the hookfunc
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetViewsPath sets view directory path in beego application.
|
|
||||||
func SetViewsPath(path string) *App {
|
|
||||||
ViewsPath = path
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetStaticPath sets static directory path and proper url pattern in beego application.
|
|
||||||
// if beego.SetStaticPath("static","public"), visit /static/* to load static file in folder "public".
|
|
||||||
func SetStaticPath(url string, path string) *App {
|
|
||||||
if !strings.HasPrefix(url, "/") {
|
|
||||||
url = "/" + url
|
|
||||||
}
|
|
||||||
url = strings.TrimRight(url, "/")
|
|
||||||
StaticDir[url] = path
|
|
||||||
return BeeApp
|
|
||||||
}
|
|
||||||
|
|
||||||
// DelStaticPath removes the static folder setting in this url pattern in beego application.
|
|
||||||
func DelStaticPath(url string) *App {
|
|
||||||
if !strings.HasPrefix(url, "/") {
|
|
||||||
url = "/" + url
|
|
||||||
}
|
|
||||||
url = strings.TrimRight(url, "/")
|
|
||||||
delete(StaticDir, url)
|
|
||||||
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) {
|
||||||
@ -90,62 +61,6 @@ func Run(params ...string) {
|
|||||||
BeeApp.Run()
|
BeeApp.Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
func initBeforeHttpRun() {
|
|
||||||
// if AppConfigPath not In the conf/app.conf reParse config
|
|
||||||
if AppConfigPath != filepath.Join(AppPath, "conf", "app.conf") {
|
|
||||||
err := ParseConfig()
|
|
||||||
if err != nil && AppConfigPath != filepath.Join(workPath, "conf", "app.conf") {
|
|
||||||
// configuration is critical to app, panic here if parse failed
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//init mime
|
|
||||||
AddAPPStartHook(initMime)
|
|
||||||
|
|
||||||
// do hooks function
|
|
||||||
for _, hk := range hooks {
|
|
||||||
err := hk()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if SessionOn {
|
|
||||||
var err error
|
|
||||||
sessionConfig := AppConfig.String("sessionConfig")
|
|
||||||
if sessionConfig == "" {
|
|
||||||
sessionConfig = `{"cookieName":"` + SessionName + `",` +
|
|
||||||
`"gclifetime":` + strconv.FormatInt(SessionGCMaxLifetime, 10) + `,` +
|
|
||||||
`"providerConfig":"` + filepath.ToSlash(SessionSavePath) + `",` +
|
|
||||||
`"secure":` + strconv.FormatBool(EnableHttpTLS) + `,` +
|
|
||||||
`"enableSetCookie":` + strconv.FormatBool(SessionAutoSetCookie) + `,` +
|
|
||||||
`"domain":"` + SessionDomain + `",` +
|
|
||||||
`"cookieLifeTime":` + strconv.Itoa(SessionCookieLifeTime) + `}`
|
|
||||||
}
|
|
||||||
GlobalSessions, err = session.NewManager(SessionProvider,
|
|
||||||
sessionConfig)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
go GlobalSessions.GC()
|
|
||||||
}
|
|
||||||
|
|
||||||
if AutoRender {
|
|
||||||
err := BuildTemplate(ViewsPath)
|
|
||||||
if err != nil && RunMode == "dev" {
|
|
||||||
Warn(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registerDefaultErrorHandler()
|
|
||||||
|
|
||||||
if EnableDocs {
|
|
||||||
Get("/docs", serverDocs)
|
|
||||||
Get("/docs/*", serverDocs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// this function is for test package init
|
// this function is for test package init
|
||||||
func TestBeegoInit(apppath string) {
|
func TestBeegoInit(apppath string) {
|
||||||
AppPath = apppath
|
AppPath = apppath
|
||||||
@ -159,3 +74,56 @@ func TestBeegoInit(apppath string) {
|
|||||||
os.Chdir(AppPath)
|
os.Chdir(AppPath)
|
||||||
initBeforeHttpRun()
|
initBeforeHttpRun()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initBeforeHttpRun() {
|
||||||
|
// if AppConfigPath not In the conf/app.conf reParse config
|
||||||
|
if AppConfigPath != filepath.Join(AppPath, "conf", "app.conf") {
|
||||||
|
err := ParseConfig()
|
||||||
|
if err != nil && AppConfigPath != filepath.Join(workPath, "conf", "app.conf") {
|
||||||
|
// configuration is critical to app, panic here if parse failed
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//init mime
|
||||||
|
AddAPPStartHook(registerMime)
|
||||||
|
AddAPPStartHook(registerDefaultErrorHandler)
|
||||||
|
AddAPPStartHook(registerSession)
|
||||||
|
AddAPPStartHook(registerDocs)
|
||||||
|
AddAPPStartHook(registerTemplate)
|
||||||
|
|
||||||
|
// do hooks function
|
||||||
|
for _, hk := range hooks {
|
||||||
|
err := hk()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetViewsPath sets view directory path in beego application.
|
||||||
|
func SetViewsPath(path string) *App {
|
||||||
|
ViewsPath = path
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStaticPath sets static directory path and proper url pattern in beego application.
|
||||||
|
// if beego.SetStaticPath("static","public"), visit /static/* to load static file in folder "public".
|
||||||
|
func SetStaticPath(url string, path string) *App {
|
||||||
|
if !strings.HasPrefix(url, "/") {
|
||||||
|
url = "/" + url
|
||||||
|
}
|
||||||
|
url = strings.TrimRight(url, "/")
|
||||||
|
StaticDir[url] = path
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
|
||||||
|
// DelStaticPath removes the static folder setting in this url pattern in beego application.
|
||||||
|
func DelStaticPath(url string) *App {
|
||||||
|
if !strings.HasPrefix(url, "/") {
|
||||||
|
url = "/" + url
|
||||||
|
}
|
||||||
|
url = strings.TrimRight(url, "/")
|
||||||
|
delete(StaticDir, url)
|
||||||
|
return BeeApp
|
||||||
|
}
|
||||||
|
41
error.go
41
error.go
@ -358,47 +358,6 @@ func gatewayTimeout(rw http.ResponseWriter, r *http.Request) {
|
|||||||
t.Execute(rw, data)
|
t.Execute(rw, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// register default error http handlers, 404,401,403,500 and 503.
|
|
||||||
func registerDefaultErrorHandler() {
|
|
||||||
if _, ok := ErrorMaps["401"]; !ok {
|
|
||||||
Errorhandler("401", unauthorized)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := ErrorMaps["402"]; !ok {
|
|
||||||
Errorhandler("402", paymentRequired)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := ErrorMaps["403"]; !ok {
|
|
||||||
Errorhandler("403", forbidden)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := ErrorMaps["404"]; !ok {
|
|
||||||
Errorhandler("404", notFound)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := ErrorMaps["405"]; !ok {
|
|
||||||
Errorhandler("405", methodNotAllowed)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := ErrorMaps["500"]; !ok {
|
|
||||||
Errorhandler("500", internalServerError)
|
|
||||||
}
|
|
||||||
if _, ok := ErrorMaps["501"]; !ok {
|
|
||||||
Errorhandler("501", notImplemented)
|
|
||||||
}
|
|
||||||
if _, ok := ErrorMaps["502"]; !ok {
|
|
||||||
Errorhandler("502", badGateway)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := ErrorMaps["503"]; !ok {
|
|
||||||
Errorhandler("503", serviceUnavailable)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := ErrorMaps["504"]; !ok {
|
|
||||||
Errorhandler("504", gatewayTimeout)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ErrorHandler registers http.HandlerFunc to each http err code string.
|
// ErrorHandler registers http.HandlerFunc to each http err code string.
|
||||||
// usage:
|
// usage:
|
||||||
// beego.ErrorHandler("404",NotFound)
|
// beego.ErrorHandler("404",NotFound)
|
||||||
|
100
hooks.go
Normal file
100
hooks.go
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
package beego
|
||||||
|
|
||||||
|
import (
|
||||||
|
"mime"
|
||||||
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/astaxie/beego/session"
|
||||||
|
)
|
||||||
|
|
||||||
|
//
|
||||||
|
func registerMime() error {
|
||||||
|
for k, v := range mimemaps {
|
||||||
|
mime.AddExtensionType(k, v)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// register default error http handlers, 404,401,403,500 and 503.
|
||||||
|
func registerDefaultErrorHandler() error {
|
||||||
|
if _, ok := ErrorMaps["401"]; !ok {
|
||||||
|
Errorhandler("401", unauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := ErrorMaps["402"]; !ok {
|
||||||
|
Errorhandler("402", paymentRequired)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := ErrorMaps["403"]; !ok {
|
||||||
|
Errorhandler("403", forbidden)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := ErrorMaps["404"]; !ok {
|
||||||
|
Errorhandler("404", notFound)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := ErrorMaps["405"]; !ok {
|
||||||
|
Errorhandler("405", methodNotAllowed)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := ErrorMaps["500"]; !ok {
|
||||||
|
Errorhandler("500", internalServerError)
|
||||||
|
}
|
||||||
|
if _, ok := ErrorMaps["501"]; !ok {
|
||||||
|
Errorhandler("501", notImplemented)
|
||||||
|
}
|
||||||
|
if _, ok := ErrorMaps["502"]; !ok {
|
||||||
|
Errorhandler("502", badGateway)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := ErrorMaps["503"]; !ok {
|
||||||
|
Errorhandler("503", serviceUnavailable)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := ErrorMaps["504"]; !ok {
|
||||||
|
Errorhandler("504", gatewayTimeout)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func registerSession() error {
|
||||||
|
if SessionOn {
|
||||||
|
var err error
|
||||||
|
sessionConfig := AppConfig.String("sessionConfig")
|
||||||
|
if sessionConfig == "" {
|
||||||
|
sessionConfig = `{"cookieName":"` + SessionName + `",` +
|
||||||
|
`"gclifetime":` + strconv.FormatInt(SessionGCMaxLifetime, 10) + `,` +
|
||||||
|
`"providerConfig":"` + filepath.ToSlash(SessionSavePath) + `",` +
|
||||||
|
`"secure":` + strconv.FormatBool(EnableHttpTLS) + `,` +
|
||||||
|
`"enableSetCookie":` + strconv.FormatBool(SessionAutoSetCookie) + `,` +
|
||||||
|
`"domain":"` + SessionDomain + `",` +
|
||||||
|
`"cookieLifeTime":` + strconv.Itoa(SessionCookieLifeTime) + `}`
|
||||||
|
}
|
||||||
|
GlobalSessions, err = session.NewManager(SessionProvider,
|
||||||
|
sessionConfig)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
go GlobalSessions.GC()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func registerTemplate() error {
|
||||||
|
if AutoRender {
|
||||||
|
err := BuildTemplate(ViewsPath)
|
||||||
|
if err != nil && RunMode == "dev" {
|
||||||
|
Warn(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func registerDocs() error {
|
||||||
|
if EnableDocs {
|
||||||
|
Get("/docs", serverDocs)
|
||||||
|
Get("/docs/*", serverDocs)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
11
mime.go
11
mime.go
@ -14,10 +14,6 @@
|
|||||||
|
|
||||||
package beego
|
package beego
|
||||||
|
|
||||||
import (
|
|
||||||
"mime"
|
|
||||||
)
|
|
||||||
|
|
||||||
var mimemaps map[string]string = map[string]string{
|
var mimemaps map[string]string = map[string]string{
|
||||||
".3dm": "x-world/x-3dmf",
|
".3dm": "x-world/x-3dmf",
|
||||||
".3dmf": "x-world/x-3dmf",
|
".3dmf": "x-world/x-3dmf",
|
||||||
@ -558,10 +554,3 @@ var mimemaps map[string]string = map[string]string{
|
|||||||
".oex": "application/x-opera-extension",
|
".oex": "application/x-opera-extension",
|
||||||
".mustache": "text/html",
|
".mustache": "text/html",
|
||||||
}
|
}
|
||||||
|
|
||||||
func initMime() error {
|
|
||||||
for k, v := range mimemaps {
|
|
||||||
mime.AddExtensionType(k, v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user