如何解决Gorm 和 go-chi REST 补丁资源
构建 REST API我想要一个补丁路由,在那里我只能更新我在请求正文中收到的属性。
我不确定将属性传递给 gorm update method 的最佳方式是什么。
这样做的好方法是什么?
这是处理程序方法。
func (m Env) UpdateHandler(w http.ResponseWriter,r *http.Request) {
var delta InsurancePolicy
insurancePolicy := r.Context().Value("insurancePolicy").(InsurancePolicy)
err := json.NewDecoder(r.Body).Decode(&delta)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
}
result := m.DB.Model(&insurancePolicy).Update(delta)
if result.Error != nil {
w.WriteHeader(http.StatusInternalServerError)
} else {
err := json.NewEncoder(w).Encode(insurancePolicy)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
}
}
}
它使用这个中间件来预加载请求:
func (m Env) InsurancePolicyCtx(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request) {
var insurancePolicy InsurancePolicy
result := m.DB.First(&insurancePolicy,chi.URLParam(r,"id"))
if result.Error != nil {
w.WriteHeader(http.StatusNotFound)
return
}
ctx := context.WithValue(r.Context(),"insurancePolicy",insurancePolicy)
next.ServeHTTP(w,r.WithContext(ctx))
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。