您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何使用中間件”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何使用中間件”吧!
使用場景:
我們接著上一期的工程繼續
查看一下目錄
? go-gin-test tree -L 3
.
├── go.mod
├── go.sum
├── hello
├── mian.go
└── routerex
└── router.go
在routerex
目錄下新建mid
目錄 在mid
目錄下新建mid.go
文件
首先我們定義一個中間件。它的作用是在請求到達服務后,但是還未進行業務處理時,需要驗證請求是否合法
編輯mid.go
package mid
import (
"github.com/gin-gonic/gin"
)
func midAuth(c *gin.Context) {
//獲取請求的ip地址
ip := c.ClientIP()
//如果請求地址來源不正確,那么阻止這個請求繼續
if ip != "baidu.com" {
println("ip 地址不正確")c.Abort()
return
}
// 處理請求
c.Next()
}
編輯router.go
package routerex
import (
"example.com/m/v2/routerex/mid"
"github.com/gin-gonic/gin"
)
func InitRouter(g *gin.Engine) {
g1 := g.Group("g1")
//中間件
g1.Use(mid.MidAuth)
g1.GET("/hello1", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "Hello g1",
})
})
g2 := g.Group("g2")
g2.GET("/hello2", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "Hello g2",
})
})
}
執行go build -o hello
來編譯為可執行文件
? go-gin-test go build -o hello
? go-gin-test ls
go.mod go.sum hello mian.go
執行./hello
讓我們的服務跑起來
打開瀏覽器訪問http://localhost:8080/g1/hello1
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /g1/hello1 --> example.com/m/v2/routerex.InitRouter.func1 (4 handlers)
[GIN-debug] GET /g2/hello2 --> example.com/m/v2/routerex.InitRouter.func2 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
ip 地址不正確
[GIN] 2021/04/06 - 17:00:38 | 200 | 61.658μs | ::1 | GET "/g1/hello1"
可以看到我們的瀏覽器上沒有任何輸出
但是在后臺日志上,我們看到了我們在代碼中打印的ip 地址不正確
通過這個思路,我們可以實現很多業務或者場景的需求。
下面這個代碼就是通用的跨域中間件
func midCors(c *gin.Context) {
c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin"))
c.Header("Access-Control-Allow-Headers", "*")
c.Header("Access-Control-Allow-Methods", "*")
c.Header("Access-Control-Allow-Credentials", "true")
//放行所有OPTIONS方法
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
}
// 處理請求
c.Next()
}
name := c.Param("name")
//這個寫法具有默認值
firstname := c.DefaultQuery("firstname", "Guest")
//無默認值
message := c.PostForm("message")
//有默認值
nick := c.DefaultPostForm("nick", "anonymous")
ids := c.QueryMap("ids")
names := c.PostFormMap("names")
form, _ := c.MultipartForm()
files := form.File["upload[]"]
//結構體
j := J{}
c.BindJSON(j)
當然除了上述常用的方式之外,gin還提供的更加豐富的獲取參數的方式。
感謝各位的閱讀,以上就是“如何使用中間件”的內容了,經過本文的學習后,相信大家對如何使用中間件這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。