簡體   English   中英

http:多個響應。WriteHeader調用

[英]http: multiple response.WriteHeader calls

我目前正在收到此http: multiple response.WriteHeader calls嘗試將響應發送回Angular時發生錯誤。 我正在做的主要事情是從Angular發送一個發布請求到Go。 Go然后將接收到的數據插入mongoDB,但是如果用戶名已經存在,我將更改dup="true"並嘗試發送自定義響應。

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

這行err := tpl.ExecuteTemplate(w, "index.html", User{u, p, e, n})應該是您要做的最后一件事,因為它將寫入響應中。

如果要處理呈現index.html時可能遇到的任何潛在錯誤,則可以通過傳入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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM