@starosta46

Как получить данные POST запроса в golang?

Есть простая страничка с кнопкой и полем для текста:
<!DOCTYPE html>
<html>  
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>




<div id="demo">
  <button v-on:click="upload">Получить данные</button>
  <div v-if="loading">Loading...</div>
  <p>{{result}} </p>
  <section v-if="errored">
    <p>We're sorry, we're not able to retrieve this information at the moment, please try back later</p>
  </section>
  
</div>

<script src="main1.js"></script>
</html>

ПО нажатию на кнопку средствами axios отправляется POST запрос на golang сервер. Запрос приходит, данные обратно отправляются и успешно обрабатываются на страничке. Однако данные запроса страницы к серверу прочитать на сервере не могу. В чем может быть причина?

JS файл:
var demo = new Vue({
    el: '#demo',
    data: {
        loading: false,
        errored: false,
        result: "no data"
    },
    methods: {
        upload: function () {
            this.loading = true;
            axios
                .post('http://localhost:8000',{123: "123"})
                .then(response => {
                    this.result = response;
                })
                //.then(response => console.log(response))
                .catch(error => {
                    console.log(error)
                    this.errored = true;
                })


                .finally(() => (this.loading = false));




        }
    }
})


Сервер:
package main

import (
	"fmt"
	"net/http"
)

func receiveSend(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Access-Control-Allow-Origin", "*")
	w.Header().Set("Access-Control-Allow-Headers", "Content-Type")

	if r.Method == "POST" {

		fmt.Println("My request is: ", r.FormValue("123"))
		fmt.Fprintln(w, "тут валидный json ")

	}
}
func main() {

	http.HandleFunc("/", receiveSend)

	http.ListenAndServe(":8000", nil)
}
  • Вопрос задан
  • 3884 просмотра
Решения вопроса 1
Комментировать
Пригласить эксперта
Ответы на вопрос 3
mmmaaak
@mmmaaak
а если посмотреть в r.Body ?
Ответ написан
@darknefrit
Ну там вроди вначале нужно сделать r.ParseMultipartForm() или r.ParseForm() а потом уже можно r.FormValue("123")
Ответ написан
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
тебе надо на стороне клиента выставить content-type application/x-www-form-urlencoded иначе ты шлешь json, и смотри матчасть что делает FormValue, json - это не форма!

axios.post('http://localhost:8000',{123: "123"}, {headers:{'Content-Type':'application/x-www-form-urlencoded'}})
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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