Перейдите на новую страницу в промежуточном программном обеспечении на Голанге - PullRequest
0 голосов
/ 18 декабря 2018

Допустим, у меня есть кнопка, которая откроет новую страницу.Действие этой кнопки обрабатывается AJAX-вызовом Golang API.Этот Golang API обернут промежуточным программным обеспечением Verify, которое проверит все перед тем, как перейти на эту страницу.Страница, определенная в функции, переданной в промежуточное ПО, использует HTML-шаблон Golang.

router.GET("/newpage", Verify(newpageHandler))

func Verify(h http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {

        //verify everything here
        //if all verify, call newpageHandler to redirect to new page
        h.ServeHTTP(w,r)
    }
}

func newpageHandler(w http.ResponseWriter, r *http.Request) {
    //this handler will process the html template
}

Когда я нажимаю кнопку (вызов AJAX на /newpage), она не открывает новую страницу, новозвращает только содержимое HTML из обработчика newpageHandler.Я вижу HTML, возвращенный из инструментов разработчика браузера, но он не получает эту новую страницу, определенную в newpageHandler.

Можно ли использовать http.Redirect?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

AJAX-вызовы будут следовать за перенаправлениями неявно.Увы, предотвратить это невозможно.Поэтому использование http.Redirect не является хорошим вариантом.

Вы можете указать в функции проверки, если запрос был принят или нет.Это можно легко сделать с помощью http-кодов состояния.Если все было в порядке, вы можете вернуть код 2xx.В случае какой-либо ошибки вы можете вернуть код 4xx.

func Verify(h http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {

        //verify everything here. verifcationFunc() returns a bool
        if verifcationFunc() {
          w.WriteHeader(http.StatusOK)
        } else {
          w.WriteHeader(http.StatusUnauthorized)
        }
    }
}

Теперь вы можете оценить возвращенный код состояния в своем JavaScript.На 200 вы можете установить новое местоположение в JavaScript.Это можно сделать с помощью window.location.На коде 401 (в приведенном выше примере) вы можете вывести сообщение об ошибке.

0 голосов
/ 18 декабря 2018

Если вы хотите изменить страницу, тогда AJAX - это не то, что вам нужно.Вместо того, чтобы отправлять запрос AJAX в API, вы должны перенаправить браузер на этот API, используя один из следующих методов, например:

HTML:

<a href="url/to/my/api">Go To page</a>

Javascript:

window.location = "url/to/my/api"
...