func init() { // ====================== // 初始化默认Server // ====================== Server = X.Serv(Project) Server.RootAppName = `blog` err := Server.LoadConfig(Server.RootDir()+`/data/config/config.yaml`, Config) if err != nil { panic(err) } if Config.FrontendTemplate.Theme == `` { Config.FrontendTemplate.Theme = `default` } if Config.BackendTemplate.Theme == `` { Config.FrontendTemplate.Theme = `admin` } Server.TemplateDir = Server.RootDir() + `/data/theme/` Server.SetTheme(&Config.FrontendTemplate) Server.InitStatic() Server.Pprof().Debug(true) Server.Core.PreUse(Language.Middleware()) Server.Session = &Config.Session Server.Cookie = &Config.Cookie Server.InitCodec([]byte(Server.Cookie.AuthKey), []byte(Server.Cookie.BlockKey)) // ====================== // 设置Session中间件 // ====================== sessionOptions := &echo.SessionOptions{ Engine: Server.Session.StoreEngine, Name: `SESSIONID`, CookieOptions: &echo.CookieOptions{ Path: `/`, Domain: Server.Cookie.Domain, MaxAge: Server.Cookie.MaxAge, Secure: false, HttpOnly: Server.Cookie.HttpOnly, }, } cookieStore.RegWithOptions(&cookieStore.CookieOptions{ KeyPairs: [][]byte{ []byte(Server.Session.StoreConfig.(string)), }, SessionOptions: sessionOptions, }) boltStore.RegWithOptions(&boltStore.BoltOptions{ File: Server.RootDir() + `/data/bolt/session.db`, KeyPairs: [][]byte{ []byte(Server.Session.StoreConfig.(string)), }, BucketName: `session`, SessionOptions: sessionOptions, }) SessionMW = session.Middleware(sessionOptions) // ====================== // 设置静态页缓存 // ====================== HtmlCache = &htmlcache.Config{ HtmlCacheDir: Server.RootDir() + `/data/html`, HtmlCacheOn: true, HtmlCacheRules: make(map[string]interface{}), HtmlCacheTime: 86400, } // ====================== // 设置其它常用功能组件 // ====================== Xsrf = xsrf.New() Jwt = jwt.New(Server.Cookie.AuthKey) Language.Init(&Config.Language) // ====================== // 连接数据库 // ====================== DB, err = database.NewOrm(Config.DB.Engine, Config.DB.Dsn()) if err == nil { DB.SetPrefix(Config.DB.Prefix) } store := localStore.New(map[string]string{ "SavePath": Server.RootDir() + `/data/upload/`, "PublicUrl": `/upload/`, "RootPath": Server.RootDir(), }) localStore.RegStore(store) Server.Core.Use(mw.Static(&mw.StaticOptions{Path: `/upload`, Root: Server.RootDir() + `/data/upload/`})) }
func main() { mode := flag.String("m", "clean2", "port of your app.") port := flag.String("p", "8080", "port of your app.") flag.Parse() var lang = language.NewLanguage() lang.Set(`zh-cn`, true, true) lang.Set(`en`, true) Cfg.HtmlCacheRules[`index:`] = []interface{}{ `index`, /*/保存名称 func(tmpl string, c echo.Context) string { //自定义保存名称 return tmpl }, func(tmpl string, c echo.Context) (mtime int64,expired bool) { //判断缓存是否过期 return },*/ } Cfg.HtmlCacheRules[`test:`] = []interface{}{ `test`, } var s *X.Server if *mode == `clean` { // =============================================================== // benchmark测试(不使用任何中间件,特别是log中间件,比较影响速度) // =============================================================== s = X.Serv() //s.ResetTmpl().Pprof().Debug(true) s.DefaultMiddlewares = []echo.Middleware{} s.Core = echo.NewWithContext(s.InitContext) } else { s = X.Serv().ResetTmpl().Pprof().Debug(true) } //================================== //测试多语言切换和session //================================== app := s.NewApp("", Cfg.Middleware()) s.Core.PreUse(lang.Middleware()) indexController = &Index{} //测试session app.R("/session", func(c *X.Context) error { var count int v := c.Session().Get("count") if v == nil { count = 0 } else { count = v.(int) count += 1 } c.Session().Set("count", count).Save() return c.String(http.StatusOK, fmt.Sprintf(`Hello world.Count:%v.Language: %v`, count, c.Language)) }). R("/t", func(c *X.Context) error { return c.Render(http.StatusOK, `index`, nil) }, `GET`). //测试Before和After以及全页面html缓存 Reg(indexController).Auto() //======================================= //测试以中间件形式实现的全页面缓存功能 //======================================= s.NewApp("test", Cfg.Middleware()). R("", func(c *X.Context) error { return c.Display(`index2`) }, `GET`) //======================================= //测试无任何中间件时是否正常 //======================================= s.NewApp("ping").R("", func(c *X.Context) error { return c.String(200, "pong") }) s.Run(":" + *port) }