是否可以将会话和一些自定义应用程序特定的json数据发送到Go的客户端表单net / http包。
我正在使用gorilla / sessions进行会话。并且在存储值之后,需要调用func(s * CookieStore)Save(r * http.Request,w http.ResponseWriter,session * Session)错误。
但另一方面,此处理函数还需要通过fmt.Fprintf(http.ResponseWriter,string(js))将一些JSON数据发送到客户端。
如何实现这一目标?
答案 0 :(得分:1)
季节一般存储为cookie,因此它作为标题发送,您需要先保存它然后写下您的json数据。
此外,您应该考虑使用json.Encoder
而不是json.Marshal
。
func handler(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session")
// stuff with session
session.Save(r, w)
w.Header().Set("Content-Type", "application/json")
enc := json.NewEncoder(w)
if err := enc.Encode(somedatastruct{}); err != nil {
//handle err
}
}
答案 1 :(得分:0)
是的,你可以写两个。与会话关联的cookie将写入响应头。 JSON数据将写入响应正文。请务必先保存会话,因为一旦应用程序开始编写响应主体,就会忽略对响应头的更改。
假设r是* http.Request,w是http.ResponseWriter,d是包含JSON的[]字节,那么你应该:
session.Save(r, w)
w.Write(d)
如果您使用标准编码/ json包,则可以直接编码到响应主体。此外,您应该设置内容类型。
session.Save(r, w)
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(yourData); err != nil {
// handle error
}