Построение запроса на отдых с динамическими сегментами - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь протестировать обработчик, обработчик ниже:

router.HandleFunc("/address/{id}", DeletePerson).Methods("DELETE")

Запрос, который я создал, был:

request, _ := http.NewRequest("DELETE", "/address/2", nil)
DeletePerson(response, request)

с использованием github.com/gorilla/mux Iпопытался извлечь "id" с помощью

params = mux.Vars(request)
item := params["id"]

returns:  params = map[] and item = ""

Однако, если я вызову DeletePerson с помощью команды curl:

curl -X DELETE http://localhost:8000/address/2

, я получу: params = map ["id"] и item= "2"

КАК я могу создать URL-запрос, который получит результаты, такие как Curl?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Мне кажется, проблема в том, что вы не указали полный URL-адрес в запросе.И я думаю, что вы игнорируете ошибку при выполнении запроса.Если вы не укажете полный URL-адрес, он выдаст что-то вроде этого: panic: Delete /address/2: unsupported protocol scheme ""

Следующий код работает нормально на моем компьютере:

package main

import "net/http"

func main() {
    r, err := http.NewRequest("DELETE", "http://localhost:8080/address/2", nil)
    if err != nil {
        panic(err)
    }
    if _, err := http.DefaultClient.Do(r); err != nil {
        panic(err)
    }
}

Надеюсь, это поможет:)

0 голосов
/ 05 октября 2018

Если вы вызываете DeletePerson напрямую, запрос не проходит через маршрутизатор, который анализирует параметры в пути запроса.

Также, http.NewRequest возвращает запрос клиента.Либо добавьте схему и хост к URL-адресу и передайте запрос на http.Client.Do, либо используйте httptest.NewRequest для непосредственного создания запроса к серверу.

NewRequest возвращает новый входящий серверЗапрос, подходящий для передачи на http.Handler для тестирования.

request := httptest.NewRequest("DELETE", "/address/2", nil)
mux.ServeHTTP(response, request)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...