Gin入门(5)-第三集才登场的主角:Gin
前情提要
上期我们讲完了mysql和Redis的配置,完成了对 main
函数下第一行代码的解析,今天接着继续
(之前写错成steup了。。。)
这是main
函数下第二行代码
点击查看SetupRouter代码
func SetupRouter() *gin.Engine {
r := gin.Default()
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"*"},
AllowMethods: []string{"GET", "PUT", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
MaxAge: 12 * time.Hour,
}))
auth := r.Group("/api/auth")
{
auth.POST("/login", controllers.Login)
auth.POST("/register", controllers.Register)
}
api := r.Group("/api")
api.GET("/exchangeRates", controllers.GetExchangeRate)
api.Use(middlewares.AutoMigrate())
{
api.POST("/exchangeRates", controllers.CreateExchangeRate)
api.POST("/articles", controllers.CreateArticle)
api.GET("/articles", controllers.GetArticles)
api.GET("/articles/:id", controllers.GetArticlesByID)
api.POST("/articles/:id/like", controllers.LikeArticle)
api.GET("/articles/:id/like", controllers.GetArticleLikes)
}
return r
}
实现前后端对接
虽然当时学这个项目只是单纯为了学Gin
,但一个完整的后端服务器是不止包含框架的,所以到了第三期我们才终于看到Gin
库的身影
Gin
官网也是有官中的
这里可以看到在不需要任何配置的情况下只需要r := gin.Default()
就可以创建一个默认参数的gin.Engine实例
而Run()
方法可以对指定的端口启用监听,不过在我们这个项目中并不直接使用这个方法,后续会提及的
这里引入了Cors
库,用来设置中间件,先讲一下Use()
方法
Deepseek给的初步讲解,如果觉得抽象的话就往死里问就完事了
HandlerFunc
的定义一眼望过去容易蒙圈,我们还是从传的参数cors.New(cors.Config{...}
入手
我们有必要看看cors库,同时对于一定要先了解CORS概念,可以看大佬的文章(正如前言所说,一个项目的技术栈往往不是一个框架,想要做出项目要学的东西可不只是编程语言)
立马就对这段代码的目的了然了:为我们的gin.Engine
添加cors
中间件
而同时我们通过cors
的Config{}
结构体为cors
进行配置
可以看到配置选项不少,我们这里就只看有改动的地方吧
其他配置就靠大家自行摸索
有Web基础的话相信大家能看得出这里是路由
的管理部分了,通过添加并配置前端请求的对应路由,我们就可以处理用户的各种操作并完成CRUD
去gorm
文档查看Group
的内容
Gin
的分组功能可以让多级路由的管理变得轻松简单,比如图示我们就可以分别访问localhost:8080/v1/login
和localhost:8080/v2/login
,在配置的时候我们就不用频繁的输入v1和v2,也更方便我们进行权限管理和版本控制
对于处理请求,Gin
支持RESTful API,配置简单易懂
通过前路径后句柄的传参即可完成特定API的对接
其实到这里,我们已经可以通过配置路由对接前端实现一些小功能了,比如按钮计数
但我们的项目还没有结束,我们还有身份认证中间件
API句柄的实现
自定义服务器关闭提示
没有讲
这些便待后续娓娓道来了
结语
如果觉得我的文章写的不错麻烦各位点个赞,你们的支持是我创作的动力
各位下次再见