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

如何在数据存储中写入请求正文?


在我的 func init() 中,我使用 gorilla mux 声明了我的路由器,因此如果我向其发出 post 请求,/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 -X POST -d "{\"type\": \"that\"}" http://localhost:8080/add


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


杨魅力
浏览 350回答 2
2回答

月关宝盒

到目前为止,以下是对您的代码的一些评论以及显示如何存储实体的快速示例:type Item Struct {&nbsp; ID int64&nbsp; Type string `json:"type"` // <-- quotes needed}func CItem(w http.ResponseWriter, r *http.Request) {&nbsp;&nbsp; &nbsp;var item Item&nbsp; &nbsp;err := json.NewDecoder(r.Body).Decode(&item) // <-- decode returns an error, not data&nbsp; &nbsp;if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; http.Error(w, err.Error(), 400)&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp;}&nbsp; &nbsp;// defer r.Body.Close()&nbsp; <-- no need to close request body&nbsp; &nbsp;fmt.Fprintln(w, item) // <-- print the decoded item&nbsp; &nbsp;c := appengine.NewContext(r)&nbsp; &nbsp;key, err := datastore.Put(c, datastore.NewIncompleteKey(c, "citem", nil), &item)&nbsp; &nbsp;if err != nil {&nbsp; &nbsp; &nbsp; &nbsp;http.Error(w, err.Error(), http.StatusInternalServerError)&nbsp; &nbsp; &nbsp; &nbsp;return&nbsp; &nbsp;}&nbsp; &nbsp;fmt.Fprintln(w, "key is", key)}

守着星空守着你

因此,您将有一个描述请求的类和另一个描述 NDB/DB 实体的类。您必须手动将数据点从请求映射到数据存储对象,然后保存它
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go