gpt4 book ai didi

http - 如何在golang中为请求和重定向添加值

转载 作者:行者123 更新时间:2023-12-01 22:14:53 24 4
gpt4 key购买 nike

我有 API 网关和用户服务微服务。当请求到达 API 网关时,我需要在 Rediret() 之前添加一些值它提供给用户服务。

func main(){
http.HandleFunc("/login", userLogin)

}
func userLogin(res http.ResponseWriter, req *http.Request) {

uuid := generateUUID()

// How to add UID to request?
http.Redirect(res, req, userservice, http.StatusSeeOther)

}

为此,我使用了描述的方法 here .
form,_ := url.ParseQuery(req.URL.RawQuery)
form.Add("uid", "far")
req.URL.RawQuery = form.Encode()

这只是在用户服务的登录路径处停止。

我也尝试使用: req.Form.Set("uid","foo")
这让人感到 panic 。

http: panic serving 127.0.0.1:55076: assignment to entry in nil map



我的用户服务:
func main(){
http.HandleFunc("/login", UserLogin)
}

func UserLogin(res http.ResponseWriter, req *http.Request) {
req.ParseForm()
requestID := req.FormValue("uid")
userID := req.FormValue("userid")

if userID =="sachith"{
sendRequest(requestID)
http.Redirect(res, req, "http://localhost:7070/home", http.StatusSeeOther)
}

有没有办法为我们收到的路由请求添加值并将其重定向到另一个服务?

最佳答案

要将查询参数添加到重定向位置,您只需将它们添加到 url Redirect 的参数功能。

此外,您不应修改 *http.Request传递给 Redirect 的参数指定目标位置,这不是它的用途。 1st,修改它只会对相对重定向产生影响,这不是你在这里想要做的。 2、url被指定用于该目的,并且可以始终用于执行相对和绝对重定向。这里没有与设计相反的优势。
apigateway/main.go

package main

import (
"net/http"
)

func main() {
http.HandleFunc("/login", loginHandler)
http.ListenAndServe(":8080", nil)
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
uuid := "911cf95b-6b3f-43fd-b695-c80c79145c51" // generate uuid
http.Redirect(w, r, "http://localhost:8081/login?user_id="+uuid, http.StatusSeeOther)
}
userservice/main.go
package main

import (
"net/http"
)

func main() {
http.HandleFunc("/login", loginHandler)
http.ListenAndServe(":8081", nil)
}

func loginHandler(w http.ResponseWriter, r *http.Request) {
uuid := r.URL.Query().Get("user_id")
w.Write([]byte(uuid))
}

关于http - 如何在golang中为请求和重定向添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61097264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com