【发布时间】:2020-10-21 10:48:37
【问题描述】:
我使用 Go-Gin 创建了一个基本的 CRUD API。在请求处理程序中调用 BindJSON 在中间件中调用 BindJSON 后会给我一个空白对象,但如果我在中间件中删除 BindJSON,则可以正常工作。
这是用户模型:
type User struct {
ID uint `json:"id" gorm:"primary_key"`
Rollnum string `json:"rollnum" gorm:"primary_key;unique"`
Name string `json:"name"`
Email string `json:"email"`
Phone uint `json:"phone"`
Address string `json:"address"`
}
这是我的中间件:
func NameMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
var user Models.User
c.BindJSON(&user)
fmt.Println(user.Rollnum)
if user.Name == "" {
c.JSON(http.StatusNotFound, gin.H{"No Key": "Name"})
c.AbortWithStatus(http.StatusNotFound)
}
}
}
这是我的路线:
r := gin.Default()
grp1 := r.Group("/user-api")
grp1.POST("user", Middleware.NameMiddleware(), Controllers.CreateUser)
这是我的 POST 请求处理程序:
func CreateUser(c *gin.Context) {
var user Models.User
c.BindJSON(&user)
fmt.Println(user)
err := Models.CreateUser(&user)
return
}
如果中间件中的 BindJSON 被移除,则可以正常工作。是否可能只能 BindJSON 一次?我应该怎么做才能在我的请求处理程序中再次获取该对象?
【问题讨论】:
标签: api go middleware go-gin