Files
go_blog/main.go
2024-12-19 09:56:01 +08:00

124 lines
2.7 KiB
Go

package main
import (
"fmt"
"go_blog/conf"
"go_blog/controllers"
"go_blog/models"
"go_blog/serializers"
"log"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
)
type User struct {
Name string
Gender string
Age int
Password string
PasswordHash []byte
}
const templatePath = "./templates/*"
func init() {
conf.SetUp()
models.SetUp()
}
func main() {
r := gin.Default()
r.LoadHTMLGlob(templatePath)
// 注册WebSocket路由
registerRoutes(r)
r.GET("/events", esSSE)
r.Run(":8910")
}
func esSSE(c *gin.Context) {
w := c.Writer
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("Access-Control-Allow-Origin", "*")
_, ok := w.(http.Flusher)
if !ok {
log.Panic("server not support") //浏览器不兼容
}
_, err := fmt.Fprintf(w, "id: aaa\ndata: %s\n\n", "dsdf")
_, er1r := fmt.Fprintf(w, "event: connecttime\ndata: %s\n\n", "connecttime")
if err != nil || er1r != nil {
print("error", err)
return
}
}
func registerRoutes(r *gin.Engine) {
r.GET("/", func(c *gin.Context) {
var items []models.Content
models.DB.Select("*").Limit(5).Find(&items, "type = ?", "post")
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"Items": items,
})
})
r.GET("/page", func(c *gin.Context) {
var items []models.Content
var pager serializers.Pager
pager.InitPager(c)
offset := (pager.Page - 1) * pager.PageSize
models.DB.Select("*").Offset(offset).Limit(pager.PageSize).Find(&items, "type = ?", "post")
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"Items": items,
"Pager": pager,
"Title": "文章列表",
})
})
r.GET("/createcontent", func(c *gin.Context) {
c.HTML(http.StatusOK, "content.tmpl", nil)
})
r.GET("/post/:id", func(c *gin.Context) {
id, err := strconv.ParseInt(c.Param("id"), 10, 32)
if err != nil {
return
}
var content = models.Content{Cid: int32(id)}
models.DB.First(&content)
c.HTML(http.StatusOK, "post.tmpl", content)
})
user := getUserInfo()
r.GET("/login", func(c *gin.Context) {
c.HTML(200, "login.tmpl", map[string]interface{}{
"title": "这个是titile,传入templates中的",
"user": user,
})
})
r.GET("/ws", controllers.WebSocketHandler)
r.POST("/content", controllers.CreateContentHandler)
r.POST("/login", controllers.UsersLoginHandler)
r.POST("/register", controllers.UsersRegisterHandler)
r.POST("/setinfo", controllers.UsersSetInfoHandler)
r.POST("/setpwd", controllers.UsersSetPwdHandler)
}
func getUserInfo() User {
user := User{
Name: "user",
Gender: "male",
Age: 18,
Password: "nothings",
PasswordHash: []byte("nothings"),
}
return user
}