apiengine.go 2.2 KB

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