main.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package main
  2. import (
  3. _ "Cold_Api/Nats"
  4. "Cold_Api/conf"
  5. "Cold_Api/controllers"
  6. "Cold_Api/models/Device"
  7. "Cold_Api/models/Product"
  8. "Cold_Api/models/Warning"
  9. "Cold_Api/routers"
  10. _ "Cold_Api/routers"
  11. "fmt"
  12. "github.com/astaxie/beego/logs"
  13. "github.com/beego/beego/v2/adapter/orm"
  14. orm2 "github.com/beego/beego/v2/client/orm"
  15. beego "github.com/beego/beego/v2/server/web"
  16. "github.com/beego/beego/v2/server/web/context"
  17. "github.com/beego/beego/v2/server/web/filter/cors"
  18. _ "github.com/go-sql-driver/mysql"
  19. "runtime"
  20. "strconv"
  21. )
  22. func init() {
  23. //lib.WritePid()
  24. fmt.Println(runtime.GOOS)
  25. orm.RegisterDriver("mysql", orm.DRMySQL)
  26. //orm.RegisterDataBase("default", "mysql", "zdxq:7e5853d9178edfcc@tcp(47.108.133.234:3306)/zdxq?charset=utf8",100,200)
  27. orm.RegisterDataBase("default", "mysql",
  28. conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
  29. conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
  30. orm.RunSyncdb("default", false, false) // 创建数据库
  31. println(conf.MysqlServer_Username + ":" + conf.MysqlServer_Password + "@tcp(" + conf.MysqlServer_UrlPort + ")/" + conf.MysqlServer_Database + "?charset=utf8mb4&loc=Local&parseTime=True")
  32. orm2.Debug = conf.MysqlServer_Debug
  33. // sql文件输出到日志
  34. if orm2.Debug == true {
  35. sqllog := logs.NewLogger()
  36. //sqllog.SetLogger(logs.AdapterFile, `{"filename":"logs/sql/sql.log","level":7,"maxlines":10000,"maxsize":1024000,"daily":true,"maxdays":10,"color":true}`)
  37. sqllog.SetLogger(logs.AdapterFile, `{"filename":"logs/sql/sql.log"}`)
  38. if conf.RunMode == "dev" {
  39. sqllog.SetLogger(logs.AdapterConsole)
  40. }
  41. orm2.DebugLog = orm2.NewLog(sqllog)
  42. }
  43. }
  44. func main() {
  45. HTTPPort_int, _ := strconv.Atoi(conf.HTTPPort)
  46. beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
  47. // 允许访问所有源
  48. AllowAllOrigins: true,
  49. // 可选参数"GET", "POST", "PUT", "DELETE", "OPTIONS" (*为所有)
  50. AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
  51. // 指的是允许的Header的种类
  52. AllowHeaders: []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type", "T_pid"},
  53. // 公开的HTTP标头列表
  54. ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Access-Control-Allow-Headers", "Content-Type"},
  55. // 如果设置,则允许共享身份验证凭据,例如cookie
  56. AllowCredentials: true,
  57. }))
  58. //过滤器,拦截所有请求
  59. beego.InsertFilter("/*", beego.BeforeRouter, routers.RBACFilter)
  60. beego.BConfig.AppName = conf.AppName // 项目名
  61. beego.BConfig.ServerName = conf.AppName + conf.HTTPPort //server 名称
  62. beego.BConfig.RunMode = conf.RunMode // 应用的运行模式
  63. beego.BConfig.Listen.HTTPPort = HTTPPort_int //监听端口 本地:8518 线上:8528
  64. beego.BConfig.WebConfig.AutoRender = false
  65. beego.BConfig.RecoverPanic = true
  66. beego.BConfig.RecoverFunc = RecoverPanic
  67. go controllers.DeviceRealTime() // 实时 数据
  68. go Warning.Read_WarningType_All_Maps() // 初始化报警类型
  69. go Product.Read_ProductType_All_Map() // 初始化产品类型
  70. go Device.Read_DeviceSensorTypeAll_Map() // 初始化传感器类型
  71. fmt.Println("======= beego.Run ======")
  72. beego.Run()
  73. }
  74. func RecoverPanic(ctx *context.Context, config *beego.Config) {
  75. if err := recover(); err != nil {
  76. ctx.ResponseWriter.Header().Set("Access-Control-Allow-Origin", ctx.Request.Header.Get("Origin"))
  77. var stack []string
  78. for i := 1; ; i++ {
  79. _, file, line, ok := runtime.Caller(i)
  80. if !ok {
  81. break
  82. }
  83. logs.Error(fmt.Sprintf("%s:%d", file, line))
  84. stack = append(stack, fmt.Sprintln(fmt.Sprintf("%s:%d", file, line)))
  85. }
  86. //显示错误
  87. data := map[string]interface{}{
  88. "ret": 4000,
  89. "AppError": fmt.Sprintf("%v", err),
  90. "RequestMethod": ctx.Input.Method(),
  91. "RequestURL": ctx.Input.URI(),
  92. "RemoteAddr": ctx.Input.IP(),
  93. "Stack": stack,
  94. "GoVersion": runtime.Version(),
  95. "Code": 500,
  96. "Msg": "请稍后重试!",
  97. }
  98. _ = ctx.Output.JSON(data, true, true)
  99. //if ctx.Output.Status != 0 {
  100. // ctx.ResponseWriter.WriteHeader(ctx.Output.Status)
  101. //} else {
  102. // ctx.ResponseWriter.WriteHeader(500)
  103. //}
  104. }
  105. }