gin自定义中间件解决requestBody不可重复读问题(最新推荐)(egg中间件)深度揭秘

随心笔谈2年前发布 编辑
162 0
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

r :=gin.Default()
// 注册中间件,使body可以重复读取
r.Use(func(context *gin.Context) {
all, err :=context.GetRawData() // 读取body的内容
if err !=nil {
log.Fatal(err)
}
// 重写 GetBody 方法,以便后续的其他操作
context.Request.GetBody=func() (io.ReadCloser, error) {
context.Request.Body=io.NopCloser(bytes.NewBuffer(all))
buffer :=bytes.NewBuffer(all)
closer :=io.NopCloser(buffer)
return closer, nil
}
body, _ :=context.Request.GetBody() // 每次调用GetBody方法,都会新生成一个io.ReadCloser,但是底层的byte数据,都是all变量缓存的。
context.Request.Body=body
context.Next()
})

© 版权声明

相关文章