Axios и fetch дают пустое отображение в Golang, даже когда URL-кодирован (заголовок добавлен) - PullRequest
0 голосов
/ 30 октября 2018

Я использую axios для отправки http-запросов (я также использовал fetch, но это дает тот же результат).

axios.post("http://localhost:3000/login",
            {
                answer: 42
            },
            {
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded",
                },
            })

В моем файле go я регистрирую ответ

func post(req *http.Request, res http.ResponseWriter) {
    req.ParseForm()

    fmt.Println(req.Form)
}

Журнал выглядит следующим образом:

map[{"answer":42}:[]]

Однако я хочу, чтобы это было так:

map["answer":[42]]

(я получаю такое при использовании почтальона)

В чем проблема с этим.

Исходящие данные для справки

Outgoing data


UPDATE

Я использовал запрос (встроенный в nodejs), а также в jQuery ajax. Они оба работают хорошо.

Это только с axios и выборкой , которая не работает

Вот код:

  • запрос

    Следующий код с использованием запроса nodejs

    var request = require("request"); 
    var options = { method: 'POST',
      url: 'http://localhost:3000/login',
      headers: 
       { 
         'cache-control': 'no-cache',
         'Content-Type': 'application/x-www-form-urlencoded' },
      form: { answer: '42' } };
    
    request(options, function (error, response, body) {
      if (error) throw new Error(error);
    
      console.log(body);
    });
    
  • JQuery AJAX

Вот мой код JQuery

var settings = {
"async": true,
  "crossDomain": true,
  "url": "http://localhost:3000/login",
  "method": "POST",
  "headers": {
    "Content-Type": "application/x-www-form-urlencoded",
    "cache-control": "no-cache",
  },
  "data": {
    "answer": "42"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

Тем не менее, я все еще не могу получить axios и получить работу. Если кто-то найдет его, обновите ответ

1 Ответ

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

Вам нужно что-то вроде этого:

var querystring = require('querystring');
axios.post('http://localhost:3000/login', querystring.stringify({'answer': 42},headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
});

Вы можете установить параметры строки запроса, используя параметр конфигурации params, Это точно будет работать:

axios.post("http://localhost:3000/login", "", {
    params: {answer: 42},
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
})

Чтобы узнать больше, прочитайте это https://github.com/axios/axios/issues/350#issuecomment-227270046

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...