material_manage_system/cmd/server/main.go
copper-xw 6a16edfa24 fix: 修正试用脚本就绪探测并支持端口可配置
MySQL 就绪探测改为走 TCP(127.0.0.1:3306),避免初始化阶段只监听 socket
的临时服务器让探测提前通过,导致后端连入时遇到 unexpected EOF。
后端监听端口改为读取 APP_PORT(默认 8082),与脚本探测的空闲端口一致,
并在启动时和最终提示中打印完整访问地址;npm 默认使用 npmmirror 镜像,
同时将根目录编译产物 /server 加入忽略。
2026-09-30 17:39:03 +08:00

73 lines
1.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"log"
"os"
"path/filepath"
"github.com/gin-gonic/gin"
"github.com/wmms/wmms/internal/handler"
"github.com/wmms/wmms/internal/repository"
"github.com/wmms/wmms/pkg/database"
)
func main() {
dsn := os.Getenv("DB_DSN")
if dsn == "" {
dsn = "root:1234@tcp(localhost:3306)/wmms?charset=utf8mb4&parseTime=true"
}
err := database.Init(dsn)
if err != nil {
log.Fatalf("Failed to initialize database: %v", err)
}
defer database.Close()
// Initialize users table and create default users
if err := repository.InitUserTable(); err != nil {
log.Fatalf("Failed to initialize users table: %v", err)
}
if err := repository.CreateDefaultUsers(); err != nil {
log.Fatalf("Failed to create default users: %v", err)
}
// Initialize applications table
appRepo := repository.NewApplicationRepository()
if err := appRepo.InitApplicationTable(); err != nil {
log.Fatalf("Failed to initialize applications table: %v", err)
}
r := gin.Default()
registerFrontendRoutes(r, "./frontend/dist")
// Serve uploaded files
r.Static("/uploads", "./uploads")
h := handler.NewHandler()
h.RegisterRoutes(r)
// WebSocket route
r.GET("/ws", handler.HandleWebSocket)
// 端口可通过 APP_PORT 覆盖,默认 8082,便于试用脚本探测空闲端口。
port := os.Getenv("APP_PORT")
if port == "" {
port = "8082"
}
addr := ":" + port
log.Printf("Server starting on %s", addr)
log.Println("Default users: admin/admin123, user/user123")
if err := r.Run(addr); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
}
func registerFrontendRoutes(r *gin.Engine, distDir string) {
r.Static("/web", distDir)
r.Static("/assets", filepath.Join(distDir, "assets"))
r.GET("/", func(c *gin.Context) {
c.File(filepath.Join(distDir, "index.html"))
})
}