Example #1
0
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/`}))
}
Example #2
0
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)
}