apiengine.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. )
  8. type ApiEngine struct {
  9. OrmEngine *xorm.Engine
  10. GinEngine *gin.Engine
  11. listen_addr string
  12. }
  13. func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
  14. engine := &ApiEngine{}
  15. var err error
  16. engine.OrmEngine, err = xorm.NewEngine(driverName, dataSourceName)
  17. if err!=nil{
  18. fmt.Println(err.Error())
  19. }
  20. initOrmEngine(engine.OrmEngine, driverName)
  21. engine.GinEngine = gin.Default()
  22. InitSystemDb(engine)
  23. //cross domain
  24. config := cors.DefaultConfig()
  25. config.AllowOrigins = []string{"http://localhost:8090"}
  26. config.AllowCredentials = true
  27. config.AllowHeaders = []string{"Content-Type,AccessToken,X-CSRF-Token, Authorization, Token"}
  28. engine.GinEngine.Use(cors.New(config))
  29. engine.listen_addr = addr
  30. return engine
  31. }
  32. func initOrmEngine(orm *xorm.Engine, driverName string) {
  33. sqldir := "./sqlconfig"
  34. //注册SqlMap配置,xml格式
  35. err := orm.RegisterSqlMap(xorm.Xml(sqldir, ".xml"))
  36. printError(err)
  37. //注册SqlTemplate配置,使用Pongo2模板引擎
  38. err = orm.RegisterSqlTemplate(xorm.Pongo2(sqldir, "_"+driverName+".stpl"))
  39. printError(err)
  40. //注册SqlTemplate配置,使用Jet模板引擎
  41. err = orm.RegisterSqlTemplate(xorm.Jet(sqldir, "_"+driverName+".jet"))
  42. printError(err)
  43. //注册SqlTemplate配置,使用html/template模板引擎
  44. err = orm.RegisterSqlTemplate(xorm.Default(sqldir, "_"+driverName+".tpl"))
  45. printError(err)
  46. orm.StartFSWatcher()
  47. orm.ShowSQL(true)
  48. /*for k,_:=range orm.SqlMap.Sql{
  49. fmt.Println(k)
  50. }*/
  51. //orm.ShowExecTime(true)
  52. }
  53. func printError(err error) {
  54. if err != nil {
  55. fmt.Println(err.Error())
  56. }
  57. }
  58. func (g *ApiEngine) SyncDb(beans ...interface{}) error {
  59. return g.OrmEngine.Sync2(beans)
  60. }
  61. func (g *ApiEngine) Run() {
  62. g.GinEngine.Run(g.listen_addr)
  63. }