Как в GO принять данные отправленные фронтендом?
Есть сайт который отправляет данные на сервер POST. Как заставить GO принять эти данные и вывести их в консоль. Вот код фронтенда :
import React,{Component} from 'react';
import logo from './logo.svg';
import './App.css';
import axios from 'axios';
class PersonInput extends React.Component {
constructor(props) {
super(props);
this.state = {
my:[]
};
}
getData = () => {
return axios(`http://localhost:8000/post`, {
method: "post", withCredentials: true, data: {
first_name: 'Fred' , //вот эти данные бэкенд должен вывести в консоле бэкенда
last_name: 'Flintstone' //вот эти данные бэкенд должен вывести в консоле бэкенда
}
}).then(res => {
console.log(res)
console.log(res.data)
})
}
render() {
return (
<div>
<form >
<input type="text" name="name" />
<button onClick={this.getData()} >Click!!!</button>
</form>
</div>
)
}
}
export default PersonInput;
Вот код бэкенда :
package main
import (
"log"
"net/http"
"fmt"
"encoding/json"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
)
type Response struct {
Status string `json:"status"`
}
func postName(w http.ResponseWriter,r *http.Request){ //функция для запроса POST
fmt.Println("God")
}
func getName(w http.ResponseWriter,r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(Response{Status: "OK"})
}
func main() {
fmt.Println("Start")
router := mux.NewRouter()
router.HandleFunc("/get",getName).Methods("GET")
router.HandleFunc("/post",postName).Methods("POST")
fmt.Println("Listen and Server")
headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"})
originsOk := handlers.AllowedOrigins([]string{"http://localhost:8080", "http://localhost:8081", "http://localhost:3000"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "PATCH", "OPTIONS", "DELETE"})
credentialsOk := handlers.AllowCredentials()
log.Fatal(http.ListenAndServe(":8000" , handlers.CORS(headersOk, originsOk, methodsOk, credentialsOk)(router)))
}
То есть бэкенд должен записать данные из фронтенда в переменную и вывести их в консоле. Помогите пожалуйста с кодом два дня мучаюсь никак не могу вникнуть.
Ответы (1 шт):
Автор решения: Tema K
→ Ссылка
func postName(w http.ResponseWriter, r *http.Request) {
// Если "Content-Type: application/x-www-form-urlencoded"
if err := r.ParseForm(); err != nil {
log.Print("ParseForm(): ", err)
return
}
log.Print(r.PostForm.Get("first_name"))
// Если "Content-Type: application/json"
var d struct {
First_name string `json:"first_name"`
Last_name string `json:"last_name"`
}
err := json.NewDecoder(r.Body).Decode(&d)
if err != nil {
log.Print("NewDecoder(): ",err)
return
}
log.Print(d.First_name)
}