为了账号安全,请及时绑定邮箱和手机立即绑定

将请求正文写入数据存储区

将请求正文写入数据存储区

Go
杨魅力 2021-08-23 17:05:23
如何在数据存储中写入请求正文?在我的 func init() 中,我使用 gorilla mux 声明了我的路由器,因此如果我向其发出 post 请求,/add我将需要向数据存储添加一些数据,但我只是从数据存储开始,所以我真的不知道该怎么做。我已经声明了一个结构项type Item Struct {  ID int64  Type string `json:type`}路由器将重定向到函数 CItemfunc CItem(w http.ResponseWriter, r *http.Request) {   var item Item  data := json.NewDecoder(r.Body).Decode(&item)  defer r.Body.Close()  fmt.Fprintln(w, data)}但是当我使用paw例如发布请求时,我得到: invalid character 'y' in literal true (expecting 'r')或使用卷曲: curl -X POST -d "{\"type\": \"that\"}" http://localhost:8080/add我该如何解决这个问题,接下来我需要做什么才能将我的数据存储在数据存储中,一个小例子会很好。
查看完整描述

2 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

到目前为止,以下是对您的代码的一些评论以及显示如何存储实体的快速示例:


type Item Struct {

  ID int64

  Type string `json:"type"` // <-- quotes needed

}


func CItem(w http.ResponseWriter, r *http.Request) { 

   var item Item

   err := json.NewDecoder(r.Body).Decode(&item) // <-- decode returns an error, not data

   if err != nil {

        http.Error(w, err.Error(), 400)

        return

   }

   // defer r.Body.Close()  <-- no need to close request body

   fmt.Fprintln(w, item) // <-- print the decoded item


   c := appengine.NewContext(r)

   key, err := datastore.Put(c, datastore.NewIncompleteKey(c, "citem", nil), &item)

   if err != nil {

       http.Error(w, err.Error(), http.StatusInternalServerError)

       return

   }

   fmt.Fprintln(w, "key is", key)

}


查看完整回答
反对 回复 2021-08-23
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

因此,您将有一个描述请求的类和另一个描述 NDB/DB 实体的类。您必须手动将数据点从请求映射到数据存储对象,然后保存它


查看完整回答
反对 回复 2021-08-23
  • 2 回答
  • 0 关注
  • 349 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信