apiengine.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. gin.SetMode(config.AppConfig.RunMode)
  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. InitSystemDb(engine)
  29. //cross domain
  30. config := cors.DefaultConfig()
  31. config.AllowOrigins = []string{"http://localhost:8090"}
  32. config.AllowCredentials = true
  33. config.AllowHeaders = []string{"Content-Type,AccessToken,X-CSRF-Token, Authorization, Token"}
  34. engine.GinEngine.Use(cors.New(config))
  35. engine.listen_addr = addr
  36. return engine
  37. }
  38. func initOrmEngine(orm *xorm.Engine, driverName string) {
  39. sqldir := "./sqlconfig"
  40. //注册SqlMap配置,xml格式
  41. err := orm.RegisterSqlMap(xorm.Xml(sqldir, ".xml"))
  42. printError(err)
  43. //注册SqlTemplate配置,使用Pongo2模板引擎
  44. err = orm.RegisterSqlTemplate(xorm.Pongo2(sqldir, "_"+driverName+".stpl"))
  45. printError(err)
  46. //注册SqlTemplate配置,使用Jet模板引擎
  47. err = orm.RegisterSqlTemplate(xorm.Jet(sqldir, "_"+driverName+".jet"))
  48. printError(err)
  49. //注册SqlTemplate配置,使用html/template模板引擎
  50. err = orm.RegisterSqlTemplate(xorm.Default(sqldir, "_"+driverName+".tpl"))
  51. printError(err)
  52. orm.StartFSWatcher()
  53. orm.ShowSQL(true)
  54. /*for k,_:=range orm.SqlMap.Sql{
  55. fmt.Println(k)
  56. }*/
  57. //orm.ShowExecTime(true)
  58. }
  59. func printError(err error) {
  60. if err != nil {
  61. fmt.Println(err.Error())
  62. }
  63. }
  64. func (g *ApiEngine) SyncDb(beans ...interface{}) error {
  65. return g.OrmEngine.Sync2(beans)
  66. }
  67. func (g *ApiEngine) Run() {
  68. g.GinEngine.Run(g.listen_addr)
  69. }