繁体   English   中英

将请求主体写入数据存储区

[英]Write the body of a request in datastore

如何在数据存储区中编写请求的正文?

在我的func init()中,我使用大猩猩mux声明了路由器,因此,如果对/add发出发布请求,则需要向数据存储区添加一些数据,但是我只是从数据存储区开始,所以我真的不知道如何至。

我已经声明了一个结构项

type Item Struct {
  ID int64
  Type string `json:type`
}

路由器将重定向到功能CItem

func 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: curl -X POST -d "{\\"type\\": \\"that\\"}" http://localhost:8080/add

我该如何解决这个问题,接下来需要做些什么来将数据存储在数据存储区中,这是一个很好的例子。

到目前为止,这是有关您的代码的一些注释,以及显示如何存储实体的快速示例:

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)
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM