angularjs - http : multiple response. WriteHeader 调用

标签 angularjs mongodb go

我目前在尝试向 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/

相关文章:

go - 什么字段对应于 netlink 中的 "dev"(设备)参数?

node.js - Mongoose Populate 在查询数据时不起作用

c# - MongoDB C# 驱动程序 IAsyncCursor<BsonDocument> 行为?

javascript - 如何使用angular js滚动div的底部

javascript - 使用 angular.js 在单独的文件夹中创建 Controller 文件

mongodb - 美元前缀字段对存储无效

go - 如何在 slice 中连接多个管道命令

html - Go 服务器不断提供过时的文件

javascript - 在 Angular JS 中绑定(bind)服务响应

javascript - 有没有办法在不访问后端的情况下处理 CORS?