如何在golang中为一个请求发送两个响应?

时间:2019-06-14 06:53:18

标签: go go-server

我在golang中有一个http服务器,在其中客户端请求任何文件时,我都使用http.ServeFile()服务。我还需要与此文件一起发送用户名和密码。因此,为此,我首先通过fmt.Fprintf()发送响应,然后再执行http.ServeFile()。 因此,它可以解决目的,但是会发出警告“ http:多余的响应。WriteHeader调用”。如何解决这个问题。

请注意:-我需要在提供的文件中发送用户名和密码。

因此,我尝试使用fmt.Fprintf()向请求编写器发送响应,然后使用http.ServeFile()提供html文件。它既可以达到目的,也可以在golang服务器中发出警告。

错误:=“ http:多余的响应。WriteHeader调用”。

if r.URL.Path == "/html/home.html" {
   fmt.Fprintf(w, `<!DOCTYPE HTML>
        <html><div><input id="username" type="hidden" readonly value="%s" /> 
        <br><input id="password" type="hidden" readonly value="%s" /><div>`, 
        name, password)
   http.ServeFile(w, r, r.URL.Path[1:])
}

3 个答案:

答案 0 :(得分:1)

发送用户名和密码是响应,提供文件也是响应。您不能一次发送两个单独的响应。您可以发送一个对象作为响应,其中包含用户名密码和服务器中文件的URL。

答案 1 :(得分:0)

您仅发送一个答复,但是我们可以将多个部分的答复合并为某种模式。

赞:

db.collection_name.aggregate[{
        $addFields : {
            childCount : {$size : "$child"}
        }
    },
    {
        $unwind : "$child"
    },{
        $unwind : "$child.grandSon"
    },{
        $group :{
            _id : "$_id",
            age : {$first : "$age"},
            childCount : {$first : "$childCount"},
            grandSonsCount : {$sum : 1},
            grandGrandSonsCount : {$sum : {$size : "$child.grandSon.grandGrandSon"}},
            grandSonsAgeCount : {$sum : "$child.grandSon.age"},
            grandGrandSonAgeCount : {$sum : {$sum : "$child.grandSon.grandGrandSon.age"}}
        }
    }
]

答案 2 :(得分:0)

错误:=“ http:多余的响应。WriteHeader调用”。 由于您无法为一个请求发送两个响应,因此出现此错误。

实现您想要做的事情的最好方法是使用cookie。以Cookie和Bingo的形式发送数据。您的工作将完成,而不会出现错误/警告。

expiration := time.Now().Add(time.Second * time.Duration(1000))
cookie := http.Cookie{Name: "Token", Value: "username", Expires: expiration}
http.SetCookie(w, &cookie)
usercookie := http.Cookie{Name: "usercookie", Value: "username", Expires: expiration}
http.SetCookie(w, &usercookie)
http.ServeFile(w, r, r.URL.Path[1:])

此代码将创建一个cookie,以后您可以访问它。这是实现所需目标的正确方法。