我目前在尝试向 Angular 发回响应时收到此 http: multiple response.WriteHeader calls
错误。我正在做的主要事情是从 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)
只是一个例子;如果我使用带有写入 header 的任何东西,我会得到相同的 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())
关于angularjs - http : multiple response. WriteHeader 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595919/