2016-11-14 7 views
0

私は現在、このhttp: multiple response.WriteHeader callsエラーを受信して​​いますが、Angularへの応答を返そうとしています。私がやっている主なことは、AngularからGoへの投稿リクエストを送信することです。 Goは受け取ったデータをmongoDBに挿入しますが、ユーザー名がすでに存在する場合はdup="true"を変更してカスタム応答を送信します。http:multiple response.WriteHeader calls

func Register(w http.ResponseWriter, req *http.Request) { 

u := req.FormValue("username") 
p := req.FormValue("password") 
e := req.FormValue("email") 
n := req.FormValue("name") 

err := tpl.ExecuteTemplate(w, "index.html", User{u, p, e, n}) 
if err != nil { 
    http.Error(w, err.Error(), 500) 
    log.Fatalln(err) 
} 

a := User{Username: u, Password: p, Email: e, Name: n} 
if a.Username != "" || a.Password != "" || a.Email != "" || a.Name != "" { 
    insert(a) 
    if dup == "true" { 
     w.WriteHeader(http.StatusInternalServerError) 
    } 
}} 

w.WriteHeader(http.StatusInternalServerError)は単なる例であり、私が書いたヘッダーで何かを使うと、私は同じことになりますhttp: multiple response.WriteHeader calls

+5

'に渡すことで、テンプレートをレンダリングすることができますをレンダリングするときに発生する可能性のある潜在的なエラーを処理したい場合は、 'dup ==" true "'ならば、それ以降に別のレスポンスヘッダを書くことはできません。単一のリクエストエラーによりサーバがクラッシュする可能性があるので、ウェブサーバで 'log.Fatal'を使用したくない場合もあります。 – JimB

答えて

3

この行はあなたの応答に書いてから最後のことです。

あなたはindex.htmlあなたはExecuteTemplate`が応答を書き込みbytes.Buffer

buf := &bytes.Buffer{} 
if err := tpl.ExecuteTemplate(buf, "index.html", User{u, p, e, n}); err != nil { 
    log.Printf("Error rendering 'index.html' - error: %v", err) 
    http.Error(w, "Internal Server Error", 500) 
    return 
} 

// Write your rendered template to the ResponseWriter 
w.Write(buf.Bytes()) 
+0

ありがとう – Racket

関連する問題