apiengine.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package engine
  2. import (
  3. "fmt"
  4. //"github.com/gin-contrib/sessions"
  5. //"github.com/gin-contrib/sessions/memstore"
  6. //"github.com/gin-contrib/sessions/cookie"
  7. "os"
  8. "time"
  9. "git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
  10. "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  11. "github.com/gin-contrib/cors"
  12. "github.com/gin-gonic/gin"
  13. "github.com/xormplus/xorm"
  14. )
  15. type ApiEngine struct {
  16. OrmEngine *xorm.Engine
  17. GinEngine *gin.Engine
  18. listen_addr string
  19. }
  20. func Default() *ApiEngine {
  21. apiengine := NewApiEngine("mysql", config.AppConfig.DataSource, fmt.Sprintf(":%d", config.AppConfig.HttpPort))
  22. return apiengine
  23. }
  24. func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
  25. engine := &ApiEngine{}
  26. var err error
  27. engine.OrmEngine, err = xorm.NewEngine(driverName, dataSourceName)
  28. if err != nil {
  29. fmt.Println(err.Error())
  30. }
  31. initOrmEngine(engine.OrmEngine, driverName)
  32. engine.GinEngine = gin.Default()
  33. //启动session
  34. //store := sessions.NewCookieStore([]byte("secret"))
  35. //engine.GinEngine.Use(sessions.Sessions("session", store))
  36. _, err = os.Stat("doc/api.tpl")
  37. if err == nil {
  38. fmt.Println("LoadHTMLGlob.")
  39. engine.GinEngine.LoadHTMLGlob("doc/*")
  40. }
  41. CreateDatabase(engine)
  42. //cross domain
  43. config := cors.DefaultConfig()
  44. config.AllowAllOrigins = true
  45. //config.AllowOrigins = []string{"http://localhost:8090"}
  46. config.AllowCredentials = true
  47. config.AllowHeaders = []string{"Content-Type,AccessToken,X-CSRF-Token, Authorization, Token"}
  48. engine.GinEngine.Use(cors.New(config))
  49. engine.listen_addr = addr
  50. //设置登陆过滤
  51. return engine
  52. }
  53. func initOrmEngine(orm *xorm.Engine, driverName string) {
  54. path, _ := utils.GetCurrentPath()
  55. sqldir := path + "/sqlconfig"
  56. //注册SqlMap配置,xml格式
  57. err := orm.RegisterSqlMap(xorm.Xml(sqldir, ".xml"))
  58. printError(err)
  59. //注册SqlTemplate配置,使用Pongo2模板引擎
  60. err = orm.RegisterSqlTemplate(xorm.Pongo2(sqldir, "_"+driverName+".stpl"))
  61. printError(err)
  62. //注册SqlTemplate配置,使用Jet模板引擎
  63. err = orm.RegisterSqlTemplate(xorm.Jet(sqldir, "_"+driverName+".jet"))
  64. printError(err)
  65. //注册SqlTemplate配置,使用html/template模板引擎
  66. err = orm.RegisterSqlTemplate(xorm.Default(sqldir, "_"+driverName+".tpl"))
  67. printError(err)
  68. //设置时区
  69. orm.DatabaseTZ = time.Local // 必须
  70. orm.TZLocation = time.Local // 必须
  71. time.LoadLocation("Asia/Shanghai")
  72. orm.StartFSWatcher()
  73. orm.ShowSQL(true)
  74. /*for k,_:=range orm.SqlMap.Sql{
  75. fmt.Println(k)
  76. }*/
  77. //orm.ShowExecTime(true)
  78. }
  79. func printError(err error) {
  80. if err != nil {
  81. fmt.Println(err.Error())
  82. }
  83. }
  84. func (g *ApiEngine) SyncDb(beans ...interface{}) error {
  85. return g.OrmEngine.Sync2(beans)
  86. }
  87. func (g *ApiEngine) Run() {
  88. InitDbData(g)
  89. g.GinEngine.StaticFile("/", "web/index.html")
  90. g.GinEngine.Static("/static", "web/static")
  91. g.GinEngine.Run(g.listen_addr)
  92. }