# #go #proxy #svelte #go-gin
Вопрос:
Я пытаюсь написать прокси для своего api и интерфейса, используя Golang и gin. Если запрос идет на что-либо, кроме «/api», я хочу подключиться к серверу svelte. Если пойдет «/api/что-то», я хочу разобраться с этим в джине. В настоящее время мой код выглядит так.
func proxy(c *gin.Context) {
remote, err := url.Parse("http://localhost:3000")
if err != nil {
panic(err)
}
proxy := httputil.NewSingleHostReverseProxy(remote)
proxy.Director = func(req *http.Request) {
req.Header = c.Request.Header
req.Host = remote.Host
req.URL.Scheme = remote.Scheme
req.URL.Host = remote.Host
req.URL.Path = c.Param("proxyPath")
}
proxy.ServeHTTP(c.Writer, c.Request)
}
func main() {
r := gin.Default()
r.Any("/*proxyPath", proxy)
r.Run(":8080")
}
Теперь, если я зайду http://localhost:8080
, я увижу свое стройное приложение. Но если я хочу добавить какой-либо другой маршрут, я получаю сообщение об ошибке panic: catch-all conflicts with existing handle for the path segment root in path '/*proxyPath'
Ответ №1:
Вы можете использовать функцию прокси-сервера в r.NoRoute r.NoRoute(proxy)
Комментарии:
1. Я бы использовал это, но мне также нужно получить доступ к переменной proxyPath. Без этого все пойдет по одному и тому же адресу.
2. Вы можете получить доступ к пути с помощью c.Request.Path. Url-адрес в вашей функции прокси-сервера