Задать вопрос

Как в Chi router обрезать префикс url?

Необходимо обрезать префикс /internal в url. Т.е. чтобы при запросах
/internal/categpry
/category
пользователь попадал на одну и ту же страницу

Попытался сделать через middleware
type Auth struct {
	service domain.UserService
	log     *logger.Logger
}

func NewAuth(service domain.UserService, log *logger.Logger) *Auth {
	return &Auth{service: service, log: log}
}

func (m *Auth) CutInternalPrefix(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		r.RequestURI = strings.TrimPrefix(r.RequestURI, "/internal")

		next.ServeHTTP(w, r)
	})
}


main
auth := middleware.NewAuth(us, log)

	handler := chi.NewRouter()
	handler.Use(auth.CutInternalPrefix)


router
r.Get("/category", category.List)

При обращении к
/internal/categpry 404 не найдена
/category 200 ок
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Chebaa Автор вопроса
Нашел решение

func (m *Auth) CutInternalPrefix(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

		r.URL.Path = strings.TrimPrefix(r.URL.Path, "/internal")

		next.ServeHTTP(w, r)
	})
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Maksclub
@Maksclub
maksfedorov.ru
r.Get("/category", category.List)

r.Route("/internal", func(r chi.Router) {
      r.Get("/category", category.List)
})

Не надо усложнять там, где не надо усложнять
Если вы не зарегистрируете роут /internal/category, то хоть пообчищайтесь, этот роут не будет найден — то хэндлер для него не будет найден среди зарегистрированных
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы