http:多个response.WriteHeader调用

时间:2016-11-14 19:00:39

标签: angularjs mongodb go

我正在尝试向Angular发送回复时收到此http: multiple response.WriteHeader calls错误。我正在做的主要是从Angular向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

1 个答案:

答案 0 :(得分:3)

这一行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())