2

セッションと一部のカスタム アプリ固有の json データの両方を、Go のクライアント フォーム net/http パッケージに送信することは可能ですか。

セッションにゴリラ/セッションを使用しています。値を保存した後、 func (s *CookieStore) Save(r *http.Request, w http.ResponseWriter, session *Session) エラーを呼び出す必要があります。

しかし一方で、このハンドラー関数は fmt.Fprintf(http.ResponseWriter, string(js)) によってクライアントに JSON データを送信する必要もあります。

これはどのように達成できますか?

4

2 に答える 2

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
    }
}
于 2014-09-30T23:40:20.620 に答える
0

はい、両方を書くことができます。セッションに関連付けられた Cookie が応答ヘッダーに書き込まれます。JSON データは、応答本文に書き込まれます。アプリケーションが応答本文の書き込みを開始すると、応答ヘッダーへの変更は無視されるため、最初に必ずセッションを保存してください。

r が *http.Request、w が http.ResponseWriter、d が JSON を含む []byte であると仮定すると、次のようにする必要があります。

session.Save(r, w)
w.Write(d)

標準の encoding/json パッケージを使用している場合は、応答本文に直接エンコードできます。また、コンテンツ タイプを設定する必要があります。

session.Save(r, w)
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(yourData); err != nil {
   // handle error
}
于 2014-09-30T23:37:35.267 に答える