package engine import ( "fmt" //"github.com/gin-contrib/sessions" //"github.com/gin-contrib/sessions/memstore" //"github.com/gin-contrib/sessions/cookie" "os" "time" "git.qianqiusoft.com/qianqiusoft/light-apiengine/config" "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "github.com/xormplus/xorm" ) type ApiEngine struct { OrmEngine *xorm.Engine GinEngine *gin.Engine listen_addr string } func Default() *ApiEngine { apiengine := NewApiEngine("mysql", config.AppConfig.DataSource, fmt.Sprintf(":%d", config.AppConfig.HttpPort)) return apiengine } func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine { engine := &ApiEngine{} var err error engine.OrmEngine, err = xorm.NewEngine(driverName, dataSourceName) if err != nil { fmt.Println(err.Error()) } initOrmEngine(engine.OrmEngine, driverName) engine.GinEngine = gin.Default() //启动session //store := sessions.NewCookieStore([]byte("secret")) //engine.GinEngine.Use(sessions.Sessions("session", store)) _, err = os.Stat("doc/api.tpl") if err == nil { fmt.Println("LoadHTMLGlob.") engine.GinEngine.LoadHTMLGlob("doc/*") } CreateDatabase(engine) //cross domain config := cors.DefaultConfig() config.AllowAllOrigins = true //config.AllowOrigins = []string{"http://localhost:8090"} config.AllowCredentials = true config.AllowHeaders = []string{"Content-Type,AccessToken,X-CSRF-Token, Authorization, Token"} engine.GinEngine.Use(cors.New(config)) engine.listen_addr = addr //设置登陆过滤 return engine } func initOrmEngine(orm *xorm.Engine, driverName string) { path, _ := utils.GetCurrentPath() sqldir := path + "/sqlconfig" //注册SqlMap配置,xml格式 err := orm.RegisterSqlMap(xorm.Xml(sqldir, ".xml")) printError(err) //注册SqlTemplate配置,使用Pongo2模板引擎 err = orm.RegisterSqlTemplate(xorm.Pongo2(sqldir, "_"+driverName+".stpl")) printError(err) //注册SqlTemplate配置,使用Jet模板引擎 err = orm.RegisterSqlTemplate(xorm.Jet(sqldir, "_"+driverName+".jet")) printError(err) //注册SqlTemplate配置,使用html/template模板引擎 err = orm.RegisterSqlTemplate(xorm.Default(sqldir, "_"+driverName+".tpl")) printError(err) //设置时区 orm.DatabaseTZ = time.Local // 必须 orm.TZLocation = time.Local // 必须 time.LoadLocation("Asia/Shanghai") orm.StartFSWatcher() orm.ShowSQL(true) /*for k,_:=range orm.SqlMap.Sql{ fmt.Println(k) }*/ //orm.ShowExecTime(true) } func printError(err error) { if err != nil { fmt.Println(err.Error()) } } func (g *ApiEngine) SyncDb(beans ...interface{}) error { return g.OrmEngine.Sync2(beans) } func (g *ApiEngine) Run() { InitDbData(g) g.GinEngine.StaticFile("/", "web/index.html") g.GinEngine.Static("/static", "web/static") g.GinEngine.Run(g.listen_addr) }