apiengine.go 2.3 KB

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