Gorm 和 go-chi REST 补丁资源

问题描述

我正在使用 chigorm

构建 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 (将#修改为@)